1

这是routes.rb:

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

如何在代码中获取 url 来编辑问题(/assignments/xyz/problems/abc/edit)?我已经尝试了
edit_assignment_problem_path(assignment,problem)
和 edit_problem_path(problem)。
虽然第一个适用于我的本地设置,但在服务器上它说方法 edit_assignment_problem_path 未定义。有任何想法吗?

4

3 回答 3

11

在你的命令行运行这个:

rake routes

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

于 2009-02-13T22:37:49.580 回答
2

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

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

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

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

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

于 2009-12-09T19:59:23.197 回答
1

还可以查看路由指南,它可以教你很多新东西。

于 2009-02-14T00:16:10.233 回答