我有一个rails 3应用程序,它有两个不同的布局。一个是针对最终用户的,另一个是用于管理应用程序的管理控制台。
这通常很容易处理,因为我可以定义一个控制器来使用1个布局。这适用于大多数设置,因为它们不涉及最终用户。但我的一些模型会。例如,管理员编辑用户配置文件与用户。为了使这项工作,我应该为模型重复控制器吗?一个用于管理控制台,一个用于用户?好像我把DRY扔出了窗外。
提前感谢您的任何反馈。
答案 0 :(得分:1)
在我看来,管理员可能与用户做的事情不同于最终用户会做的事情,因此不同的控制器可能不会完全解除。
但是,如果它们完全相同并且您只想拥有不同的布局,那么您可以根据当前用户设置布局。像这样的东西会起作用:
layout :determine_layout
def determine_layout
return 'admin' if current_user && current_user.admin?
'application'
end
答案 1 :(得分:1)
您无需复制代码。只需在您的应用程序中添加一个授权层,您就可以在现有代码中创建这些功能。 为了达到这个目的,我会向你推荐CanCan gem:
CanCan是Ruby on Rails的授权库,它限制了它 允许给定用户访问哪些资源。所有权限都是 在单个位置(Ability类)中定义,而不是重复 跨控制器,视图和数据库查询。
您可以在project page上查看更多内容并查看示例,还有一个Railscast。