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