我正在做一些元编程,在其中向模型添加可访问属性,并且想知道如何检查并查看这些属性是否可访问。
查看文档,但找不到参考。
我知道我可以做类似的事情object.instance_methods
,但那十几个并没有真正将其过滤到可访问的范围内。
是否有一些方法可以返回可访问的属性?
我正在做一些元编程,在其中向模型添加可访问属性,并且想知道如何检查并查看这些属性是否可访问。
查看文档,但找不到参考。
我知道我可以做类似的事情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]
我希望这有帮助