2009-06-23 13 views
10

OK Estoy seguro de que me falta algo aquí, pero por favor, perdóname, soy nuevo en Rails.Rieles - Una manera fácil de mostrar todos los campos a la vista

¿Hay algún modo en Rails para mostrar todos los campos de un objeto en lugar de especificar cada uno?

En mi plantilla show.html en lugar de ir

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

sólo quiero una oneliner hacer esto sin tener que escribir cada uno de los 15 o más campos que tengo. Es una página de administración por lo que está bien si se muestran todos los campos (id, created_at, etc.) Si esto fuera PHP, me llevaría unos 5 segundos usando foreach, pero busqué en Google (en las cosas incorrectas obviamente) para una hora sin suerte.

Gracias!

Respuesta

32

Algo así como

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

podría hacer el truco.

Matt

+0

¡Gracias! ¡Exactamente lo que yo también quería! .humanizar ¡eh! Creo que necesito eso para mis hijos a veces – Michael

+0

Buen truco, Rieles, siempre <3 – Unitech

+2

love it! Terminé usando: '<% para el atributo en ['nombre', 'edad', 'etc.']%>' Mostrar solo los campos que quiero mostrar. – DavidG

4

Supongo que desea mostrar todos los atributos de una fila de la tabla de la base de datos que se define como el modelo de ActiveRecord. Puede usar el método de clase column_names (cada modelo de ActiveRecord lo tiene), que devuelve los nombres de las columnas de la tabla en una matriz.

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

Gracias! ¡Exactamente lo que quería! – Michael

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

Este es el fragmento que solía lista negra algunos atributos que no quería mostrar ...

controlador (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 

ver (mostrar.html.erb):

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

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

También se puede utilizar en su lugar:

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

con el fin de mostrar una whilelist de propiedades.

2
<%= debug @user %> 

manera simple de mostrar el objeto ... ¡eso es lo que suelo usar de todos modos!

0

Si está utilizando haml y quieren colocar a través de los atributos, por ejemplo, en un objeto de usuario en una vista:

- for attribute in @user.attributes.keys 
    %p 
    = attribute.humanize 
    = @user.attributes[attribute].to_s 
Cuestiones relacionadas