如何在Rails中覆盖/别名命名的路由助手

时间:2011-08-10 15:53:32

标签: ruby-on-rails ruby ruby-on-rails-3 routes

在我的应用程序中,我的所有模型都依赖于主模型。这就是为什么我的所有路线都嵌套在这条主要路线中的原因。我的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

......但不会很严重。有没有办法干净利落地做到这一点?也许通过覆盖命名的路由生成器?

1 个答案:

答案 0 :(得分:1)

由于您已经在会话中引用了主模型,因此实际上并不是识别它的路由。你已经知道在哪里找到它。因此,出于路由的目的,根本不需要嵌套资源。

如果您仍希望为路线添加前缀,则可以使用scope

scope "main_model" do
  resources :model_1
  resources :model_2
  resources :model_3 do
    resources: :model_4
  end
end

这将为您提供所需的帮助方法,不需要您将冗余引用传递给main_model

或者只是不要嵌套它们。