我想要一个可以批量分配的所有属性名称的列表。对于自定义表单构建器,我需要此设置,该表单构建器默认不会添加无法批量分配的输入字段。
例如,如果我有以下模型:
class Post < ActiveRecord::Base
attr_protected :account
belongs_to :author
validates_presence_of :title, :author
end
结果我希望有[:author, :title]
。
Answers:
如果您明确定义了attr_accessible,则Post.accessible_attributes会覆盖它
除非这样做,否则这样做很麻烦,但可以:
Post.new.attributes.keys - Post.protected_attributes.to_a
SHOULDN'T
可以访问而不是ARE NOT
吗?如果您传递的名称为name =“ post [created_at]”且值为=“ 01/01/2012”的输入,则不会进入模型吗?在这里。取决于您的Rails版本(在Github / accessible properties丑闻之后,Rails核心将更改默认值)。
前面提到的某些答案可能不适用于Rails 4。
但是,您可以MyModel.attribute_names
用来获取表属性的数组,但这可能无法为您提供大量可分配的属性,因为Rails的这一方面随版本4的变化而变化http://weblog.rubyonrails.org/2012/3/21/strong-parameters /
Post.accessible_attributes(:user)
,Post.accessible_attributes(:admin)
等我还发现Post.active_authorizers
有用的,它返回所有定义的角色和他们的访问属性的哈希值。
User
由数据库表支持的模型。对于User.accessible_attributes
,我得到NoMethodError: undefined method "accessible_attributes" for #<Class:0x007f9216346fe8>
Post.accessible_attributes.to_a.map(&:to_sym)