2010-09-15 53 views
2

情景是这样的:对于相同的控制器操作,处理多个布局/视图的最Rails'ish方法是什么?

我的网站上有一些用户。用户有一个角色,这里的相关部分是adminnormal。我也有一个模型,我们称之为SomeModel

我为该网站创建了一个后端,它使用了一个admin布局。所有管理员都可以完全访问编辑任何内容。

问题出现在这个关系中:用户 - >拥有 - > SomeModel。这意味着非admin 用户可以拥有SomeModel的实例,并且应该能够编辑此实例的数据。

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

不过,我不希望普通用户seing的管理布局,现在,我做到这一点的方法是,像这样:

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

如果用户是默认为标准布局不管理员。我在SomeModel的所有操作中都有这个,它看起来并不像Rails的做法。

有没有更好的方法?

回答

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

+0

感谢您的链接。我想我跳过了这部分文档,这绝对是“更清洁”的感觉。 – rhardih 2010-09-15 19:53:08

相关问题