我在rails应用程序中使用mailboxer gem来处理用户之间的私人消息。我有一个单独的页面来查看您的收件箱和一个单独的页面来查看您的垃圾箱文件夹。 URL localhost / conversations成功加载了收件箱。我想要一个可以为垃圾桶加载单独页面的链接,例如localhost / conversations / trashbin。但是,我不能让Rails识别我为这样一个页面创建的任何路由。
此外,直接转到该URL会显示错误:
Couldn't find Conversation with id=trashbin
我理解错误发生的原因,但我不知道如何解决。问题在于我的路线文件:
resources :conversations do
member do
post :reply
post :trash
post :untrash
get 'trashbin', :action => 'trashbin'
end
end
使用resources
会导致应用查找特定会话。除了这一个案例之外,这在整个申请的其他部分中都是有用的。我只是想收集所有标记为垃圾的邮件。如何编辑此路由文件以完成此操作?
以下是我在索引对话页面上的链接:
<a href="<%= conversations_path %>"> <%= @conversations.count %> Inbox </a> | <a href="<% trashbin_conversations_path %>"> <%= @trash.count %> Trash </a>
谢谢!
编辑:
感谢下面的答案,我已将路线更新为:
resources :conversations do
member do
post :reply
post :trash
post :untrash
end
collection do
get :trashbin
end
end
但是,URL对话/垃圾箱现在显示未知操作错误:
The action 'trashbin' could not be found for ConversationsController
我的ConversationsController显然已定义了操作。为什么会出现此错误?
答案 0 :(得分:3)
不要使用成员路线 - 改为使用收集路线:
resources :conversations do
member do
post :reply
post :trash
post :untrash
end
collection do
get :trashbin
end
end
有关详细信息,请参阅here。
答案 1 :(得分:2)
将路线放入集合范围
resources :conversations do
member do
post :reply
post :trash
post :untrash
end
collection do
get :trashbin
end
end