web-dev-qa-db-ja.com

ActiveRecord:一括割り当て可能なモデルのすべての属性を取得する方法は?

一括割り当てできるすべての属性名のリストが必要です。これは、デフォルトで一括割り当てできない入力フィールドを追加しないカスタムフォームビルダーに必要です。

たとえば、次のモデルがある場合:

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end

結果として_[:author, :title]

70
Vincent

Attr_accessibleを明示的に定義した場合、Post.accessible_attributesがそれをカバーします。

それを除いて、このようなことをするのは不格好ですが、うまくいきます:

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

前述の回答の一部は、Rails 4。

MyModel.attribute_namesを使用してテーブル属性の配列を取得できますが、これはRailsのバージョン4で変更されるため、大量の割り当て可能な属性が得られない場合があります http ://weblog.rubyonrails.org/2012/3/21/strong-parameters/

68
Victor S

使うだけ

Post.accessible_attributes

クラスのすべての アクセス可能な属性 を返します

25
Antoine

モデルの場合、MyModel.attribute_namesまたはMyModel.column_namesを使用できます。

インスタンスには、MyModel.new.attribute_namesを使用できます。

18
Scudelletti

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

1
Rajesh Paul