web-dev-qa-db-fra.com

Comment obtenir la liste des attributs d'un modèle activerecord pouvant être assignés en masse

J'aimerais avoir une liste de tous les noms d'attributs pouvant être affectés en masse. J'ai besoin de cela pour un générateur de formulaire personnalisé qui n'ajoutera pas de champs de saisie qui ne peuvent pas être affectés en masse. Par exemple si j'ai un modèle comme:

class Post < ActiveRecord::Base
  attr_protected :account

  belongs_to :author

  validates_presence_of :title, :author
end

J'aimerais avoir pour résultat une liste contenant: auteur,: titre.

Une idée si une telle méthode existe? Ou quelques lignes directrices sur la façon dont je peux en faire un?

63
Vincent

Post.accessible_attributes le couvrirait si vous définissiez explicitement attr_accessible

Sauf que, faire quelque chose comme ça est maladroit mais marche:

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

Certaines des réponses mentionnées précédemment peuvent ne pas s'appliquer à Rails 4.

Vous pouvez utiliser MyModel.attribute_names pour obtenir le tableau d'attributs de table. Toutefois, cela pourrait ne pas vous donner d'attributs assignables en masse, car cet aspect de Rails change avec la version 4 http://weblog.rubyonrails.org/2012/3/21/ paramètres forts/

64
Victor S

Juste utiliser 

Post.accessible_attributes

Cela retournera tous les attributs accessibles de la classe

24
Antoine

Pour les modèles, vous pouvez utiliser MyModel.attribute_names ou MyModel.column_names.

Par exemple, vous pouvez utiliser MyModel.new.attribute_names.

16
Scudelletti

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

0
Rajesh Paul