【问题标题】:What is the most Rails'ish way of handling multiple layouts/views for the same controller action?为同一个控制器操作处理多个布局/视图的最 Rails 方式是什么?
【发布时间】:2011-04-12 20:40:14
【问题描述】:

场景是这样的:

我的网站上有一些用户。一个用户有一个角色,这里相关的是adminnormal。我也有一个模型,我们就叫它SomeModel吧。

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

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

SomeModel 的控制器有一个编辑操作,可以同时满足管理员和普通用户的需求。

但是,我不希望普通用户看到 admin 布局,而现在,我这样做的方式是这样的:

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

如果用户不是管理员,则默认为标准布局。我在 SomeModel 的所有操作中都有这一点,但它看起来不像是 Rails 的做事方式。

有没有更好的办法?

【问题讨论】:

    标签: ruby-on-rails actionview actioncontroller


    【解决方案1】:

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

      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 文档中有更多示例

    【讨论】:

    • 感谢您的链接。我想我跳过了文档的那部分,这绝对让人感觉“更干净”。
    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2018-08-19
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多