Schienen - Einfache Möglichkeit, alle Felder in Ansicht anzuzeigen
-
06-07-2019 - |
Frage
OK, ich bin sicher, dass ich hier etwas fehlt bin, aber bitte verzeihen Sie mir, ich bin neu in Rails.
Gibt es eine Möglichkeit in Rails alle Felder eher für ein Objekt angezeigt werden als jede Angabe?
In meiner show.html Vorlage anstatt ich
<p>Name: <%=h @user.full_name %></p>
<p>Email: <%=h @user.email %></p>
Ich will nur ein Einzeiler, dies zu tun, ohne jede der 15 oder so Felder tippen, die ich habe. Es ist eine Admin-Seite so seine Ordnung, wenn alle Felder gezeigt (id, created_at, etc.) Wenn diese PHP ist, würde es dauern etwa 5 Sekunden mit foreach, aber ich habe gegoogelt (auf die falschen Dinge natürlich) für eine Stunde ohne Glück.
Danke!
Lösung
So etwas wie
<% for attribute in @user.attributes.keys %>
<p><%= attribute.humanize %> <%= @user.attributes[attribute].to_s %></p>
<% end %>
könnte den Trick tun.
Matt
Andere Tipps
Ich nehme an, Sie alle Attribute einer Reihe von Datenbanktabelle angezeigt werden sollen, die als Active Modell definiert ist. Sie können Klassenmethode verwenden column_names (jedes Active Modell hat es), die Namen der Tabellenspalten in einem Array zurückgibt.
<%= User.column_names.collect { |col_name| "#{col_name.capitalize}: <p>#{@user[col_name]}</p>" }.join("\n") %>
<%= debug @user %>
einfache Möglichkeit, das Objekt zu zeigen, ... das ist, was ich in der Regel sowieso verwenden!
@user.attributes.each{|key, value| puts "#{key} : #{value}"}
Dies ist der Code-Schnipsel habe ich einige Attribute auf die schwarze Liste ich nicht zeigen wollte ...
Controller (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
Ansicht (show.html.erb):
<!-- language: ruby --><% for attribute in @user_showlist.keys %>
<b><%= attribute.humanize %></b>
<%= @user.attributes[attribute].to_s %>
<!-- language: ruby --><% end %>
Sie können auch statt:
@user_showlist = @user.attributes.slice(*keys_whitelist)
, um eine whilelist von Eigenschaften anzuzeigen.
Wenn Sie haml verwenden und wollen eine Schleife durch die Attribute zum Beispiel eines Benutzerobjekt in einer Ansicht:
- for attribute in @user.attributes.keys
%p
= attribute.humanize
= @user.attributes[attribute].to_s