我有一个非常复杂的rails应用程序,几乎没有基于用户角色的“层”:
每个图层/命名空间都有不同的布局和选项。这些差异是如此之大,以至于我需要强烈地将它们分开。
我可以使用路由命名空间,并将每个层放在正确的url命名空间下,即/admin
,/label
,/band
,/fan
,但我不想要它在前端(在url中)和基于路由的可见。但是,我希望在此解决方案中能够将层子文件夹中的每个应用程序部件控制器,模型和视图分开。
正确的图层可以由current_user角色确定,因此如果我能够在application_controller
中手动设置所需的名称空间而不是使用路径模式,那将会很棒。
这样的事情可能吗?
答案 0 :(得分:1)
1)
以下是范围和角色(使用warden gem)的示例
scope module: lambda { |request| request.env['warden'].user.role } do
resources :posts, :comments
end
有关此处路由的详细信息:Rails Routing
此示例不处理用户未登录时的情况以及模块不存在的情况。我不知道这是否是正确的道路,但这是一个解决方案。
2)
我的第二个想法是不通过不同的模块,而是使用Exhibits和Strategy pattern
我喜欢这个想法是它更多OO,但可能更少“Rails方式”