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


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

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end

Я хотел бы получить в результате список, содержащий :автор :название.

есть идеи, если такой метод существует? Или некоторые рекомендации о том, как я могу сделать один, что это?

5 61

5 ответов:

пост.accessible_attributes покроет его, если вы явно определили attr_accessible

за исключением того, что делать что-то вроде этого неуклюже, но работает:

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

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

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

просто использовать

Post.accessible_attributes

, что вернет все атрибуты доступны класса

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

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

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