Rails嵌套资源 - 未创建路由

时间:2012-02-12 15:19:43

标签: ruby-on-rails

我在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"}

为什么没有行动路线=> show已创建?

Thx

2 个答案:

答案 0 :(得分:0)

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

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"}

答案 1 :(得分:0)

确实创造了这条路线。我认为你误解了实际路线的助手。

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 METHOD

显示 - 获取

更新 - 投放

创建 - 发布

DESTROY - DELETE

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

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

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

祝你好运