Rails路由器:避免长助手

时间:2013-05-12 22:26:24

标签: ruby-on-rails routing

考虑来自router.rb的以下片段

resource :user do
   namespace :settings do
      resource :access_filter
   end
   get 'settings'
end

这会生成我想要的URL(user/settings/access_filter),但会产生不需要的目录结构和一些长网址帮助。

在这种情况下,助手变为new_user_settings_access_filter,我宁愿只有new_access_filter。 Rails期望AccessFiltersController驻留在名为Settings的模块中。

我想要一种保持平面目录结构,平面url帮助器结构,但是“嵌套”URL结构的方法。只要没有参数是必要的,我不认为我的控制器和视图需要知道访问过滤器嵌套在用户模型下,我希望保留机会将它们移动到说options/access_filter而不破坏站点。

如何到达那里的想法将不胜感激。

1 个答案:

答案 0 :(得分:3)

如果您只想为路径添加前缀,则可以避免使用单独的scope进行嵌套和任何麻烦。在组织上,这似乎也有意义,因为您实际上想要将访问过滤器路由与用户分离。

scope "user/settings" do
  resource :access_filter
end

# then if you wanted to change it later, it's simply
scope "options" do
  resource :access_filter
end

scopenamespace实际使用的较低级别功能。它更加灵活,允许您在不更改控制器查找和路由名称的情况下装饰路径。