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?
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
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/
Juste utiliser
Post.accessible_attributes
Cela retournera tous les attributs accessibles de la classe
Pour les modèles, vous pouvez utiliser MyModel.attribute_names
ou MyModel.column_names
.
Par exemple, vous pouvez utiliser MyModel.new.attribute_names
.
Post.accessible_attributes.to_a.map(&:to_sym)