Avec un modèle, comment boucler toutes les propriétés?

je veux passer en boucle toutes les propriétés de mon modèle "utilisateur", Comment puis-je faire cela?

25
demandé sur Blankman 2010-10-26 15:32:01
la source

3 ответов

Si vous avez une instance de votre modèle, puis user.attributes est un Hachage du modèle d'attributs et de leurs valeurs, de sorte, par exemple, vous pouvez faire quelque chose comme:

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

si vous n'avez pas d'instance spécifique, 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
48
répondu mikej 2010-10-26 15:44:39
la source
Article.columns.each do |column|
  puts column.name
end

ceci itère sur tous les objets de la colonne pour le modèle D'Article.

1
répondu Michiel de Mare 2010-10-26 15:42:17
la source

@modèle.méthodes renvoie les noms de toutes les méthodes de l'objet.

@modèle.méthode.grep (/=$ / ) vous retournera 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 une "propriété".

vous pouvez aussi inspecter les attributs hash (@model.attributs) qui est un hachage avec toutes les colonnes définies dans la base de données, et cela peut être la manière la plus fiable, puisque la méthode "méthodes" peut ne pas inclure les lecteurs d'attributs (et les rédacteurs) générés dynamiquement. (Cela peut dépendre de la version de RubyOnRails que vous utilisez).

1
répondu Arsen7 2010-10-26 15:47:15
la source

Autres questions sur