cit*_*ite 6 ruby-on-rails actionview actioncontroller
在我的应用程序中,我有一个"用户"模型.每个用户可以拥有多个(电子邮件)地址,这些地址在"地址"模型中定义:
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
Run Code Online (Sandbox Code Playgroud)
在AddressController类中,当前登录的用户可在"@user"实例变量中使用.控制器阻止普通用户编辑,删除,查看等不属于他们的地址 - 但他允许管理用户编辑这些地址.如果当前登录的用户正在执行正常或超级用户操作,则AddressController类可以询问AddressModel.
这一切都运行良好,数据库更新按预期进行,但是,我真的希望根据操作模式使用不同的HTML视图.我只能想到两种方法来实现这一目标:
如果可以在两个完全不同的布局中显示执行单个控制器的结果,根据它的操作模式,有什么好的方法可以实现呢?
在此先感谢Stefan
您可以指定要使用哪个视图在操作本身中显示操作的结果.您还可以指定要使用的布局.所以,例如:
def my_action
if @user.is_authorised(...)
render :action => 'admin_action', :layout => 'admin'
else
render :action => 'non_admin_action', :layout => 'non_admin'
end
end
Run Code Online (Sandbox Code Playgroud)
这将呈现任一个admin_action.html.erb或non_admin_action.html.erb取决于返回的值is_authorised.该:layout选项是,呃,可选和意见/布局是指一个布局.渲染调用有各种其他选项,您可以在文档中找到渲染.
您可以通过以下方式为该特定控制器或应用程序控制器中的整个应用程序指定视图的布局:
class SomeController < ApplicationController
layout :set_layout
def set_layout
@user.is_authorized(...) ? "privileged_layout" : "normal_layout"
end
...
end
Run Code Online (Sandbox Code Playgroud)
您可以尝试在此处找到它:http://guides.rubyonrails.org/layouts_and_rendering.html#using-render,在2.2.12下查找布局
希望这有助于=)
| 归档时间: |
|
| 查看次数: |
7403 次 |
| 最近记录: |