2010-10-26 3 views

Répondre

48

Si vous avez une instance de votre modèle puis user.attributes est une table de hachage des attributs et leurs valeurs du modèle ainsi, par exemple, vous pouvez faire quelque chose comme:

user.attributes.each_pair do |name, value| 
    puts "#{name} = #{value}" 
end 

Si vous ne disposez pas d'un particulier instance alors la classe a des méthodes qui renvoient des informations sur les champs de la base de données, par exemple User.columns et User.content_columns. par exemple.

User.columns.each do |column| 
    puts column.name 
end 
+2

Ceci est obsolète à partir des rails 4, quelle est la bonne solution maintenant? –

+1

Lesquelles des méthodes mentionnées sont obsolètes? Ils semblent tous être dans les documents de l'API. – mikej

+2

Cela a bien fonctionné pour moi sur Rails 4.2.2. Merci mikej. –

1
Article.columns.each do |column| 
    puts column.name 
end 

Ce itère sur tous les objets de colonne pour le modèle de l'article.

1

@ model.methods renvoie les noms de toutes les méthodes de l'objet. @ Model.methods.grep (/ = $ /) vous renverra les noms de toutes les méthodes d'écriture, donc vous pouvez deviner que si vous avez un setter, alors vous avez aussi un lecteur, donc cela peut être un " propriété".

Vous pouvez également inspecter les attributs hash (@ model.attributes) qui est un Hash avec toutes les colonnes définies dans la base de données, et cela peut être le moyen le plus fiable, car la méthode "methods" peut ne pas inclure l'attribut lecteurs (et écrivains) générés dynamiquement. (Cela peut dépendre de la version de RubyOnRails que vous utilisez).

Questions connexes