【问题标题】:Rails nested resource - route not being createdRails嵌套资源 - 未创建路由
【发布时间】:2012-02-12 15:19:43
【问题描述】:

我在rails中做了一个嵌套资源:

resources :courses do
  resource :members
end

并获得以下路线:

course_members      POST     /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"create"}
new_course_members  GET      /courses/:course_id/members/new(.:format)        {:controller=>"members", :action=>"new"} 
edit_course_members GET      /courses/:course_id/members/edit(.:format)       {:controller=>"members", :action=>"edit"}
                    GET      /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"show"}
                    PUT      /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"update"}
                    DELETE   /courses/:course_id/members(.:format)            {:controller=>"members", :action=>"destroy"}

为什么没有创建动作路线=>显示?

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您的路由文件中是否还有其他可能存在冲突的内容?另外,您如何查看路线?当我将上面的内容添加到我的路由文件中时,我得到以下信息:

    course_members     GET    /courses/:course_id/members(.:format)          {:action=>"index", :controller=>"members"}
                       POST   /courses/:course_id/members(.:format)          {:action=>"create", :controller=>"members"}
    new_course_member  GET    /courses/:course_id/members/new(.:format)      {:action=>"new", :controller=>"members"}
    edit_course_member GET    /courses/:course_id/members/:id/edit(.:format) {:action=>"edit", :controller=>"members"}
    course_member      GET    /courses/:course_id/members/:id(.:format)      {:action=>"show", :controller=>"members"}
                       PUT    /courses/:course_id/members/:id(.:format)      {:action=>"update", :controller=>"members"}
                       DELETE /courses/:course_id/members/:id(.:format)      {:action=>"destroy", :controller=>"members"}
    courses            GET    /courses(.:format)                             {:action=>"index", :controller=>"courses"}
                       POST   /courses(.:format)                             {:action=>"create", :controller=>"courses"}
    new_course         GET    /courses/new(.:format)                         {:action=>"new", :controller=>"courses"}
    edit_course        GET    /courses/:id/edit(.:format)                    {:action=>"edit", :controller=>"courses"}
    course             GET    /courses/:id(.:format)                         {:action=>"show", :controller=>"courses"}
                       PUT    /courses/:id(.:format)                         {:action=>"update", :controller=>"courses"}
                       DELETE /courses/:id(.:format)                         {:action=>"destroy", :controller=>"courses"}
    

    【讨论】:

      【解决方案2】:

      确实创建了路线。我认为您将助手误认为是实际路线。

      GET      /courses/:course_id/members(.:format) {:controller=>"members", :action=>"show"}
      

      我认为您的困惑来自于您有三个助手(course_members、new_course_members 和 edit_course_members),而您没有“show_course_members”。

      Rails 只为 SHOW、UPDATE、DESTROY 和 CREATE 操作创建一个助手,因为您可以通过调用的 HTTP 方法来区分它们。

      动作 | HTTP 方法

      显示 - 获取

      更新 - 放置

      创建 - 发布

      销毁 - 删除

      如果您使用 GET 方法调用 course_members_path,Rails 将调用 show 操作。

      但是,我注意到另一件事:您仅为一个成员创建资源(因此在 routes.rb 中的单数中的资源)。一门课程真的只有一个成员吗? 如果您在控制器上有 has_one 关系,则应在 routes.rb 中使用单词 resource(单数)。 如果您有 has_many,则应改用 resources(复数)。

      看看 http://guides.rubyonrails.org/routing.html#singular-resources

      最好的问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 2011-05-23
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多