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

标签 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

在 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/

    相关文章:

    android-intent - 如何覆盖直播电视播放器作为设置为操作 ACTION_VIEW 的 Intent 的默认处理程序?

    ruby-on-rails - Rails 未在生产中呈现 404

    ruby-on-rails - 当 default_url_options trailing_slash 为 true 时,Rails root_url 有两个正斜杠

    ruby-on-rails - 我如何传递Rails的cycle()一个值数组来循环?

    ruby-on-rails - rails 5.1 : url helper for files in public folder

    ruby-on-rails - Rails 3.1 模板处理程序

    zend-framework - 如何对 zend Action Controller 进行单元测试?

    ruby-on-rails - 是否可以根据两个不同的字段设置验证检查

    ruby-on-rails - 在 Rails 应用程序中生成所有电子邮件的样本版本

    C# 的 LINQ 用于在 ruby​​ 中等效的集合操作