gpt4 book ai didi

ruby-on-rails - 一个 Controller ,普通用户和管理员的不同 View

转载 作者:行者123 更新时间:2023-12-04 13:09:05 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个“用户”模型。每个用户可以有多个(电子邮件)地址,这些地址在模型“地址”中定义:

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 。我只能想到两种方法来实现这一目标:
  • 使操作模式(正常/特权)在 AddressController 类中已知(使用实例变量,例如@privileged)并在 View 中使用“if”语句。
  • 在地址 Controller 中使用类似“after_filter”的东西来呈现不同的布局。

  • 如果可以根据其操作模式以两种完全不同的布局显示执行单个 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.erbnon_admin_action.html.erb取决于 is_authorised 的返回值. :layout option 是,呃,可选的,指的是 View /布局中的布局。您可以在 documentation for render 中找到渲染调用的其他各种选项。 .

    关于ruby-on-rails - 一个 Controller ,普通用户和管理员的不同 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322189/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com