2

我有一个具有 2 种不同布局的 rails 3 应用程序。一个用于最终用户,另一个是用于管理应用程序的管理控制台。

这通常很容易处理,因为我可以定义一个控制器来使用 1 个布局。这适用于大多数设置,因为它们不涉及最终用户。但我的一些模型会。例如,管理员编辑用户配置文件与用户。为了完成这项工作,我应该为模型设置重复的控制器吗?一个用于管理控制台,一个用于用户?好像我把 DRY 扔出了窗外。

提前感谢您的任何反馈。

4

2 回答 2

1

在我看来,管理员可能会对用户做不同的事情,而不是最终用户会做的事情,因此不同的控制器可能不会完全不干燥。

但是,如果它们完全一样,而您只想拥有不同的布局,那么您可以根据当前用户设置您的布局。像这样的东西会起作用:

layout :determine_layout

def determine_layout
  return 'admin' if current_user && current_user.admin?
  'application'
end
于 2013-06-03T21:35:10.600 回答
1

您不需要复制代码。只需向您的应用程序添加一个授权层,您就可以在现有代码中制作这些功能。为此,我向您推荐 CanCan gem:

CanCan 是 Ruby on Rails 的授权库,它限制给定用户可以访问的资源。所有权限都在一个位置(Ability 类)中定义,并且不会在控制器、视图和数据库查询之间重复。

您可以在项目页面上查看更多信息并查看示例,还有一个Railscast

于 2013-06-03T21:39:19.440 回答