【问题标题】:rails routing problem轨道路由问题
【发布时间】:2010-11-22 02:41:55
【问题描述】:

我有一些 RESTful 控制器,并向application_controller 添加了一个自定义方法。 我没有更改路线中的任何内容来指示这种新方法。方法是poll_memos。我输入了以下网址:

/groups/1234/poll_memos

我收到以下错误:

未知操作

没有对 1234 响应的操作。操作:创建、销毁、编辑、索引、新建、poll_memos、显示和更新

两个问题:由于我没有修改路由,rails 是如何知道poll_memos 的?二、既然好像知道了,为什么还是不行呢?

【问题讨论】:

    标签: ruby-on-rails rest


    【解决方案1】:

    我不认为 rails 会自动生成一条宁静的路线。这意味着您需要自己添加它。

    看看这个question 和这个one

    它在动作中,因为它在控制器中,错误消息只是打印所有动作。

    【讨论】:

      【解决方案2】:

      正确的 url 是 /groups/poll_memos/1234。在您的示例中,rails 认为您正在尝试调用名为“1234”的控制器方法,当然这是不存在的。

      Rails 知道 poll_memos,因为打印错误消息的代码查看控制器代码,而不是路由。你可以设置路由,让它说有 poll_memos 方法,但是你无法通过 URL 访问它。

      【讨论】:

        【解决方案3】:

        这是因为你很可能触发了默认路由:

        map.connect ':controller/:action/:id'
        

        你的网址

        /groups/1234/poll_memos
        

        将映射如下:

        {:controller => "groups", :action => "1234", :id => "poll_memos"}
        

        此外,由于您使用的是 restful 样式,因此您需要配置路由。要让投票备忘录对集合中的项目起作用,您需要修改您的路线以映射如下:

        map.resources :groups, :member => {:poll_memos => :get}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          • 2016-03-29
          相关资源
          最近更新 更多