在我的应用程序中,我有一个“用户”模型。每个用户可以有多个(电子邮件)地址,这些地址在模型“地址”中定义:
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”实例变量中可用。 Controller 阻止普通用户编辑、删除、查看不属于他们的地址等 - 但他确实允许管理用户编辑这些地址。 AddressController 类可以询问 AddressModel 当前登录的用户是否正在执行普通或 super 用户操作。
这一切都很好,数据库更新按预期进行,但是,我真的很想根据操作模式有不同的 HTML View 。我只能想到两种方法来实现这一目标:
如果可以根据其操作模式以两种完全不同的布局显示执行单个 Controller 的结果,那么有什么好的方法可以实现呢?
提前致谢
斯特凡
最佳答案
您可以在操作本身中指定使用哪个 View 来显示操作的结果。您还可以指定要使用的布局。因此,例如:
def my_action
if @user.is_authorised(...)
render :action => 'admin_action', :layout => 'admin'
else
render :action => 'non_admin_action', :layout => 'non_admin'
end
end
这将呈现
admin_action.html.erb
或 non_admin_action.html.erb
取决于 is_authorised
的返回值. :layout
option 是,呃,可选的,指的是 View /布局中的布局。您可以在 documentation for render 中找到渲染调用的其他各种选项。 .
关于ruby-on-rails - 一个 Controller ,普通用户和管理员的不同 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322189/