ActionController::UrlGenerationError: No route matches 动作控制器::Url生成错误:没有匹配的路由
ActionController::UrlGenerationError: No route matches 动作控制器::Url生成错误:没有匹配的路由
我在这行代码<%= link_to "Ask User Out", askout_user_message_path(@user), :class => "button" %>
中收到了一个没有匹配路由的错误。
在我添加一个gem之前,这个功能是可以工作的,但是现在停止工作了。我尝试将它移动到集合(collection)下面,但是没有成功,因为它原本就在那里。
路由:
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
我的路由改变了,因为我添加了mailboxer gem。
在这个问题中,用户遇到了(ActionController::UrlGenerationError: No route matches)这个错误。根据提供的代码和讨论,我们可以得出以下原因和解决方法。
问题原因:
在用户的代码中,路由设置有误,导致无法匹配到正确的路由。
解决方法:
用户需要根据需求正确设置路由。下面是两种可能的解决方法。
解决方法一:
在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
命令来查看路径帮助程序,从而得到路由的准确名称,进而正确设置路由。
在讨论中,用户还提到了collection
和member
的理解问题。如果需要的路径是courses/:id/features
,则应该使用member
;如果只是courses/features
,则应该使用collection
。
最后,用户还提供了一个关于Rails路由的链接,供其他用户参考和学习。