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!

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top