我在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
答案 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方法告诉彼此。
显示 - 获取
更新 - 投放
创建 - 发布
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
祝你好运