0

我目前正在使用 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支持但我错过的东西吗?

4

1 回答 1

1

attr_accessible 用于过滤批量分配的传入属性。这是一种方便的方法,开发人员不需要手动清理传入的参数哈希,这是他无法控制的。

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

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

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

如果您不希望拥有完整的模型,而只希望拥有值,则可以使用生成的 sql。例如。

ActiveRecord::Base.connection.select_values(Customer.select('name').to_sql)
于 2011-06-02T00:01:01.860 回答