ActiveRecord: как получить все атрибуты модели, которые могут быть назначены по массе? - PullRequest
68 голосов
/ 06 октября 2009

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

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

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end

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

Ответы [ 5 ]

96 голосов
/ 06 октября 2009

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

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

Post.new.attributes.keys - Post.protected_attributes.to_a
67 голосов
/ 18 февраля 2014

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

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

25 голосов
/ 21 февраля 2013

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

Post.accessible_attributes

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

18 голосов
/ 18 мая 2015

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

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

0 голосов
/ 18 мая 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...