Rails嵌套资源

时间:2009-02-13 22:18:22

标签: ruby-on-rails ruby routes nested-resources

这是routes.rb:

map.resources :assignments, :shallow => true  do |assignment|  
    assignment.resources :problems  
end  

如何在代码中获取编辑问题的URL(/ assignments / xyz / problems / abc / edit)?我试过了两个     edit_assignment_problem_path(分配问题)
    和edit_problem_path(问题)。
虽然第一个适用于我的本地设置,但在服务器上它表示没有定义edit_assignment_problem_path方法。有什么想法吗?

3 个答案:

答案 0 :(得分:11)

在命令行运行:

rake routes

它会告诉您已定义的所有路线以及它们的映射方式。非常方便。

答案 1 :(得分:2)

:浅=>在Rails 2.2中引入了true。您的本地设置可能正在运行早期版本,而您的服务器可能运行2.2或更早版本。

对于浅路由,您必须指定完整路由(例如/ assignments / a / problems / ..):index,:create和:new actions(因为这些操作需要完整路径)并且必须使用short route(例如/ problems / ..):edit,:show,:update和:destroy actions。

如果你想要所有路由的完整版本和短版本,唯一的可能是使用没有浅层和短路径的嵌套资源路由,例如:

map.resources :assignments, has_many => :problems
map.resources :problems

请注意,在您的示例中,您不需要使用map.resources的块表单。

答案 2 :(得分:1)

同时查看可以教你很多新事物的routing guide