0

我正在做一些元编程,在其中向模型添加可访问属性,并且想知道如何检查并查看这些属性是否可访问。

查看文档,但找不到参考。

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible

我知道我可以做类似的事情object.instance_methods,但那十几个并没有真正将其过滤到可访问的范围内。

是否有一些方法可以返回可访问的属性?

4

2 回答 2

1

使用accessible_attributesprotected_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在您的班级,那么您的所有属性(黑名单中的属性除外)都可以访问。

于 2013-09-20T00:55:55.967 回答
0

假设您有一个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]

我希望这有帮助

于 2013-01-17T10:08:18.123 回答