在我的应用程序中,我的所有模型都依赖于主模型。这就是为什么我的所有路线都嵌套在这条主要路线中的原因。我的route.rb看起来像那样:
resources :main_model do
resources :model_1
resources :model_2
resources :model_3 do
resources :model_4
end
end
因此,我的任何命名路由助手都会使用相同的对象重复相同的开头(在会话中)。我这样称呼我的道路:
new_main_model_model_1_path(session[:main_model])
edit_main_model_model_3_model_4_path(session[:main_model], @model_3, @model_4)
但我厌倦了在每个链接中重复自己,所以我希望能够像这样调用我的路线:
new_model_1_path()
edit_model_3_model_4_path(@model_3, @model_4)
我可以写别名方法......
def new_model_1_path(model_1)
new_main_model_model_1_path(session[:main_model], model_1)
end
......但不会很严重。有没有办法干净利落地做到这一点?也许通过覆盖命名的路由生成器?
答案 0 :(得分:1)
由于您已经在会话中引用了主模型,因此实际上并不是识别它的路由。你已经知道在哪里找到它。因此,出于路由的目的,根本不需要嵌套资源。
如果您仍希望为路线添加前缀,则可以使用scope
:
scope "main_model" do
resources :model_1
resources :model_2
resources :model_3 do
resources: :model_4
end
end
这将为您提供所需的帮助方法,不需要您将冗余引用传递给main_model
。
或者只是不要嵌套它们。