Pregunta

OK, estoy seguro de que me falta algo aquí, pero por favor, perdóname, soy nuevo en Rails.

¿Hay alguna forma 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>

Solo quiero que un oneliner haga esto sin tener que escribir cada uno de los 15 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 se tratara de PHP, me llevaría unos 5 segundos usar foreach, pero he buscado en Google (obviamente en las cosas equivocadas) durante una hora sin suerte.

¡Gracias!

¿Fue útil?

Solución

Algo así

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

podría hacer el truco.

Matt

Otros consejos

Supongo que desea mostrar todos los atributos de una fila de la tabla de base de datos que se define como modelo ActiveRecord. Puede usar el método de clase column_names (todos los modelos de ActiveRecord lo tienen), 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") %>
<%= debug @user %>

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

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

Este es el fragmento que utilicé para poner en la 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

vista (show.html.erb):

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

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

También puedes usar en su lugar:

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

para mostrar una lista de propiedades while.

Si está utilizando haml y desea recorrer los atributos en, por ejemplo, un objeto de usuario en una vista:

- for attribute in @user.attributes.keys
  %p
    = attribute.humanize
    = @user.attributes[attribute].to_s
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top