Rieles: forma fácil de mostrar todos los campos a la vista
-
06-07-2019 - |
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!
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