ActiveRecord: как получить все атрибуты модели, которые могут быть назначены по массе?

Я хотел бы иметь список всех имен атрибутов, которые могут быть назначены массово. Мне это нужно для пользовательского конструктора форм, который не будет добавлять поля ввода по умолчанию, которые не могут быть назначены по массе.

Например, если у меня есть следующая модель:

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end

Я хотел бы получить в результате [:author, :title].

Ответ 1

Post.accessible_attributes будет охватывать его, если вы явно определили attr_accessible

Запрет на то, что выполнение чего-то подобного неудобно, но работает:

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

Ответ 2

Некоторые из ранее упомянутых ответов могут не применяться для Rails 4.

Вы можете использовать MyModel.attribute_names для получения массива атрибутов таблицы, хотя это может не дать вам назначаемых вам атрибутов, поскольку этот аспект Rails изменяется с версией 4 http://weblog.rubyonrails.org/2012/3/21/strong-parameters/

Ответ 3

Просто используйте

Post.accessible_attributes

Это вернет все доступные класса

Ответ 4

Для моделей вы можете использовать MyModel.attribute_names или MyModel.column_names.

Для экземпляров вы можете использовать MyModel.new.attribute_names.

Ответ 5

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