我正在进行一些元编程,将可访问的属性添加到模型中,并想知道如何检查这些属性是否可访问。
查看了文档,但找不到参考资料。
http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible
我知道我可以做object.instance_methods
之类的事情,但那十几个并不能真正将其过滤为可访问的。
是否有一些方法可以返回可访问的属性?
使用accessible_attributes
和protected_attributes
。
class User < ActiveRecord::Base
attr_accessible :first_name, :last_name
end
User.accessible_attributes
# => #<ActiveModel::MassAssignmentSecurity::WhiteList: {"", "first_name", "last_name"}>
User.protected_attributes
# => #<ActiveModel::MassAssignmentSecurity::BlackList: {"id", "type"}>
如果您在类中调用attr_protected
而不是attr_accessible
,那么除黑名单中的属性外,您的所有属性都可以访问。
假设您有一个具有以下属性的User
模型::id, :lastname, :firstname, :email
你的模型类是:
class User < ActiveRecord::Base
attr_accessible :lastname, :firstname
end
你可以有这样的可访问列表:
User.attr_accessible[:default].to_a
=> [:lastname, :firstname]
此外,您还可以拥有不可访问属性的列表:
User.new.attributes.keys - User.attr_accessible[:default].to_
=> [:id, :email]
我希望这能帮助