【问题标题】:Unable to add custom routes in rails无法在 Rails 中添加自定义路线
【发布时间】:2014-01-02 20:45:26
【问题描述】:

我在 Rails 应用程序中使用邮箱 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 明确定义了操作。为什么会出现这个错误?

【问题讨论】:

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


    【解决方案1】:

    不要使用成员路由 - 改为使用集合路由:

    resources :conversations do
      member do
        post :reply
        post :trash
        post :untrash
      end
      collection do
        get :trashbin
      end
    end
    

    有关更多信息,请参阅here

    【讨论】:

    • 谢谢!这绝对是朝着正确方向迈出的一步。直接转到 /conversations/trashbin 会给我留下 Unknown 操作,尽管我的对话控制器中显然有 def trashbin。关于为什么在我的控制器中找不到操作的任何想法?
    • @james - 你重新加载你的 Rails 服务器环境了吗?
    • 是的,我刚刚重启了本地开发环境,没有运气:/
    • 会不会是html.erb文件的名字?应该叫什么?
    • 你的视图应该叫trashbin.html.erb,除非你专门渲染一些其他的内容...
    【解决方案2】:

    将路由放在集合范围内

      resources :conversations do
        member do
          post :reply
          post :trash
          post :untrash
        end
        collection do
          get :trashbin
        end
      end
    

    【讨论】:

    • 谢谢!我认为这是正确的,但 URL 对话/垃圾箱会显示一个未知操作错误,即使垃圾箱操作已在控制器中明确定义。你知道可能是什么原因吗?
    • 尝试在控制台中运行 rake 路由,看看是否能找到路由
    猜你喜欢
    • 2021-08-17
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多