在我的应用程序中,我有一个“用户”模型。每个用户都可以拥有其在模型“地址”定义了多个(电子邮件)地址:一个控制器,针对普通用户和管理员的不同视图
Class User < ActiveRecord::Base
has_many :addresses
def is_authorized(op)
# returns true or false
end
def is_owned_by(user)
# returns true or false
end
end
Class Address < ActiveRecord::Base
belongs_to :user
end
里面的AddressController类,当前登录的用户是在“@user”实例变量可用。控制器可以防止普通用户编辑,删除,查看等不属于他们的地址 - 但他确实允许管理用户编辑这些地址。 AddressController类可以询问AddressModel是否当前登录的用户正在执行正常或超级用户操作。
这一切都很好地工作和数据库更新如预期,但是,我真的很喜欢有不同的HTML视图取决于操作模式。我只能想到的两种方式来实现这一目标:
- 使操作的模式(正常/特权)在AddressController类称为(使用实例变量,如@privileged),并在使用“如果”的声明风景。
- 在地址控制器中使用类似“after_filter”的东西来渲染不同的布局。
如果可以在两种完全不同的布局中显示执行单个控制器的结果(取决于它的操作模式),那么实现该目标的好方法是什么?
在此先感谢 斯特凡
谢谢。但是,似乎如果我这样做,我会离开“约定优先配置”的路径。我有点担心 - 这是我的第一个Rails应用程序 - 我是否应该已经偏离其他人似乎做的事情? – cite 2009-08-24 15:16:03
好吧,可以说是惯例是为一个动作渲染一个视图,但我可以看到你在看什么。如果你只是寻找不同的布局,那么Staelen的解决方案是一个很好的解决方案。如果你真的想要根据动作中的逻辑渲染不同的视图,那么我不确定它是否足够接近基本约定,以避免不指定要呈现哪个视图。 – Shadwell 2009-08-24 15:59:23
我想我会尝试使用Staelen的布局解决方案,以及您要为模板渲染的解决方案。再次感谢。 – cite 2009-08-24 16:10:02