无法在rails中添加自定义路由

时间:2014-01-02 20:45:26

标签: ruby-on-rails ruby ruby-on-rails-3 routes

我在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显然已定义了操作。为什么会出现此错误?

2 个答案:

答案 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