用于访问模型属性的动态范围

时间:2011-06-01 23:39:32

标签: ruby-on-rails activerecord activemodel

我目前正在使用rails 3中的批量分配安全性来确定哪些级别的用户可以更新其模型。例如,此代码允许我根据用户级别保护属性。

  class Customer
    attr_accessor :name, :credit_rating

    attr_accessible :name
    attr_accessible :name, :credit_rating, :as => :admin
  end

我希望能够使用同样的想法,当我进行查找时,会出现哪些属性。例如,我希望能够说

Customer.all.as(:admin) 

并取回信用评级。将此与做

进行比较
Customer.all

并取回除credit_rating

以外的所有属性

这是rails支持的东西,我错过了吗?

1 个答案:

答案 0 :(得分:1)

attr_accessible用于过滤质量分配的传入属性。这是一种创建的便捷方法,因此开发人员不需要手动清除params的传入哈希,这是他无法控制的。

当显示信息时,开发人员完全控制他/她希望显示的内容,因此似乎没有理由限制读取功能。

但是,rails允许您在查询中“选择”所需的属性:请参阅http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

您可以轻松创建名称为admin的范围,该范围将限制所选值。

如果您不希望拥有完整模型,只需要使用值,则可以使用生成的sql。 E:克

ActiveRecord::Base.connection.select_values(Customer.select('name').to_sql)