ActiveRecord:如何获取可以批量分配的模型的所有属性?

时间:2009-10-06 14:49:02

标签: ruby-on-rails activerecord

我想要一个可以批量分配的所有属性名称的列表。我需要这个自定义表单构建器,默认情况下不会添加无法批量分配的输入字段。

例如,如果我有以下型号:

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end

我希望得到[:author, :title]

5 个答案:

答案 0 :(得分:95)

如果您明确定义了attr_accessible

,Post.accessible_attributes将覆盖它

除此之外,做这样的事情很笨重但有效:

Post.new.attributes.keys - Post.protected_attributes.to_a

答案 1 :(得分:65)

前面提到的一些答案可能不适用于Rails 4。

您可以使用MyModel.attribute_names来获取表属性数组,但是,这可能无法为您提供大量可分配属性,因为Rails的这个方面随版本4更改http://weblog.rubyonrails.org/2012/3/21/strong-parameters/

答案 2 :(得分:24)

只需使用

Post.accessible_attributes

这将返回班级的所有attributes accessible

答案 3 :(得分:17)

对于模特,您可以使用MyModel.attribute_namesMyModel.column_names

例如,您可以使用MyModel.new.attribute_names

答案 4 :(得分:0)

Post.accessible_attributes.to_a.map(&:to_sym)