Question

OK, je suis sûr qu’il me manque quelque chose, mais pardonnez-moi, je suis nouveau chez Rails.

Existe-t-il un moyen dans Rails d’afficher tous les champs d’un objet au lieu de les spécifier?

Dans mon modèle show.html plutôt que d'aller

<p>Name: <%=h @user.full_name %></p>
<p>Email: <%=h @user.email %></p>

Je veux juste que l’un des doubleurs puisse le faire sans avoir à taper chacun des quelque 15 champs que j’ai. C’est une page d’administration, donc très bien si tous les champs sont affichés (id, created_at, etc.) Si c'était en PHP, cela me prendrait environ 5 secondes en utilisant foreach, mais j'ai googlé (sur les mauvaises choses évidemment) pendant une heure sans succès.

Merci!

Était-ce utile?

La solution

Quelque chose comme

<% for attribute in @user.attributes.keys %>
  <p><%= attribute.humanize %> <%= @user.attributes[attribute].to_s %></p>
<% end %>

pourrait faire l'affaire.

Matt

Autres conseils

Je suppose que vous souhaitez afficher tous les attributs d'une ligne de la table de base de données définie comme modèle ActiveRecord. Vous pouvez utiliser la méthode de classe nom_colonne (chaque modèle ActiveRecord en dispose), qui renvoie les noms des colonnes de la table dans un tableau.

<%= User.column_names.collect { |col_name| "#{col_name.capitalize}: <p>#{@user[col_name]}</p>" }.join("\n") %>
<%= debug @user %>

Un moyen simple de montrer l'objet ... c'est ce que j'utilise habituellement quand même!

@user.attributes.each{|key, value| puts "#{key} : #{value}"}

Voici l'extrait de code que j'ai utilisé pour lister certains attributs que je ne voulais pas montrer ...

contrôleur (user_controller.rb)     

def show

    keys_blacklist = %W(user_id name) #these are the fields to hide
    @user_showlist = @user.attributes.except(*keys_blacklist)

end

vue (show.html.erb):

<!-- language: ruby --><% for attribute in @user_showlist.keys %> 

  <b><%= attribute.humanize %></b>
  <%= @user.attributes[attribute].to_s %>
<!-- language: ruby --><% end %>

Vous pouvez également utiliser à la place:

@user_showlist = @user.attributes.slice(*keys_whitelist)

afin d'afficher une liste blanche de propriétés.

Si vous utilisez haml et souhaitez parcourir les attributs, par exemple un objet utilisateur dans une vue:

- for attribute in @user.attributes.keys
  %p
    = attribute.humanize
    = @user.attributes[attribute].to_s
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top