首页 文章

Rails路由器:避免长助手

提问于
浏览
0

请考虑router.rb中的以下代码段

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

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

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

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

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

1 回答

  • 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实际使用的较低级别函数 . 它更加灵活,允许您在不更改控制器查找和路由名称的情况下装饰路径 .

相关问题