处理同一控制器动作的多个布局/视图的最Rails'方式是什么?

时间:2010-09-15 19:00:27

标签: ruby-on-rails actionview actioncontroller

情景如下:

我的网站上有一些用户。用户具有角色,此处的相关角色为adminnormal。我也有一个模型,我们称之为SomeModel

我为该网站创建了一个后端,该后端使用 admin 布局。所有管理员都拥有编辑任何内容的完全权限。

这种关系出现了问题:用户 - >拥有 - > SomeModel 即可。这意味着非管理员用户可以拥有SomeModel的实例,并且应该能够编辑此实例的数据。

SomeModel的控制器有一个编辑操作,然后迎合管理员和普通用户。

但是,我不希望普通用户立即使用 admin 布局,我这样做是这样的:

if current_user.admin?
  render :layout => 'admin'
end

如果用户不是管理员,则默认为标准布局。我在SomeModel的所有操作中都有这个,而且它似乎不是一种非常Rails的做事方式。

有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

您可以在控制器级别执行此操作:

  class MyModelController < ActionController::Base
    layout :user_or_admin_layout

    def index
      # fetching objects
    end

    private
      def user_or_admin_layout
        current_user.admin? ? "admin_layout" : "user_layout"
      end
  end

layout

的rails文档中有更多示例