【问题标题】:ActionController::UrlGenerationError: No route matchesActionController::UrlGenerationError:没有路由匹配
【发布时间】:2014-02-28 19:41:13
【问题描述】:

我收到来自<%= link_to "Ask User Out", askout_user_message_path(@user), :class => "button" %> 行的无路由匹配错误。

这在我添加 gem 之前可以工作,但现在它停止工作了。我尝试在收藏下移动,但我不走运,因为它曾经是这样的。

路线:

 resources :users do |user|

 resources :messages do
   member do
     post :new
     get 'askout', action: 'askout'
   end
 end
  collection do
     get :trashbin
     post :empty_trash

end
 end

 resources :conversations do
   member do
     post :reply
     post :trash
     post :untrash
   end
 end

旧路线:

 resources :users do |user|

    resources :messages do
      collection do
        post 'delete_multiple'
        get 'askout', action: 'askout'
        get 'reply', action: 'reply'
      end
    end
  end

添加邮箱 gem 后,我的路线发生了变化。

【问题讨论】:

  • 这个嵌套路由需要一个消息 id,因为您在资源成员中定义了 askout :messages,使用这样的帮助器:askout_user_message_path(@user, message) 其中 message 是使用 params[:id] 找到的消息--- 如果您不希望它需要消息 id,请将其放在集合块中并使用 askout_user_messages_path(@user)(消息上的复数)

标签: ruby-on-rails


【解决方案1】:

你最好这样做:

   #config/routes.rb
   resources :users do
     resources :messages do
       member do
         post :new
         get :askout
       end
     end
     collection do
         get :trashbin
         post :empty_trash
      end
   end

这会给你:

users/1/messages/5/askout

我认为你想要什么:

   #config/routes.rb
   resources :users do
     resources :messages do
       post :new
       collection do
         get :askout
       end
     end
     collection do
         get :trashbin
         post :empty_trash
      end
   end

这会给你:

users/2/messages/askout

路径助手将在rake routes 视图中确定——您应该查看它以了解您的路线被称为什么(允许您相应地编写它)

【讨论】:

  • 我在收藏和会员之间有所了解。就像如果我想要courses/:id/features 那么它应该在成员之下,如果只是courses/features 然后是集合。我理解对了吗?
  • 收藏=courses/features,成员=courses/:id/features,“无”=courses/:course_id/features
  • 在成员 = courses/:id/features 中,必须传递什么样的ID。如果它的嵌套路由像你的答案。
  • 嵌套资源将自动为您引用的控制器创建一系列 member / collection 路由。例如resources :x do resources :y end 将导致collection x/:x_id/y。如果您为嵌套资源手动设置member 路由,则必须为嵌套记录设置id,并为父记录设置:parent_id。如果你写一个问题,如果你需要,我会为你写一个详细的答案
  • 没问题!报价仍然代表问题:D
猜你喜欢
  • 2015-11-26
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多