ActionController::UrlGenerationError: No route matches 动作控制器::Url生成错误:没有匹配的路由

27 浏览
0 Comments

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。

0
0 Comments

在这个问题中,用户遇到了(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命令来查看路径帮助程序,从而得到路由的准确名称,进而正确设置路由。

在讨论中,用户还提到了collectionmember的理解问题。如果需要的路径是courses/:id/features,则应该使用member;如果只是courses/features,则应该使用collection

最后,用户还提供了一个关于Rails路由的链接,供其他用户参考和学习。

0