Lucas Sallovitz wrote:
2008/6/25 Eduardo Trápani <[EMAIL PROTECTED]>:
<table>
<% for i in [
{:label => 'Fecha',:field => 'date'},
{:label => 'Contratista',:field => 'contratista.nombre'},
{:label => 'Desde',:field => :desde},
{:label => 'Hasta',:field => :hasta},
{:label => 'Monto',:field => :amount}
] %>
<tr>
<th><%= i[:label] %></th><td class="sinborde"><%= @contrato.send(i[:field])
%></td>
</tr>
<% end %>
</table>
Las primeras versiones del generate scaffold hacían algo parecido con un
<% for field in @contrato.attributes %>
<tr>
<th><%= field.name %></th>
<td class="sinborde"><%= h field.value %></td>
</tr>
<% end %>
Ojo que estoy inventado y no se si falta algún detalle, en particular
se me ocurre que no siempre querés mostrar todos los atributos, en ese
caso haría un método contrato#atributos_mostrables que devuelva la
lista, o en todo caso en el mismo for le agregás un .reject o .select
de acuerdo a lo que necesites:
<% for field in @contrato.attributes.select { |a|
['campo1','campo2','campo3'].includes? a.name %>
<tr>
<th><%= field.name %></th>
<td class="sinborde"><%= h field.value %></td>
</tr>
<% end %>
El comentario sobre CSS2 aplica de todas formas, podes estilear todas
las td con .contenedor td
Saludos. Lucas.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
Correcto, lo del scaffold que comentas se hace usando el column_names, y
quedaría de la siguiente manera:
<% for aircraft in @aircraft %>
<tr>
<% for column in Aircraft.content_columns %>
<td><%=h aircraft.send(column.name) %></td>
<% end %>
<td><%= link_to 'Show', :action => 'show', :id => aircraft %></td>
<td><%= link_to 'Edit', :action => 'edit', :id => aircraft %></td>
<td><%= link_to 'Destroy', { :action => 'destroy', :id => aircraft
}, :confirm => 'Are you sure?', :method => :post %></td>
</tr>
<% end %>
</table>
Sin embargo, Eduardo, si solo queres mostrar algunos de los campos de la
DB yo no pondría esa lógica en la vista. Podes usar el atributo
":select" del find(), cuya documentación reza:
":select - By default, this is "*" as in "SELECT * FROM", but can be
changed if you, for example, want to do a join but not include the
joined columns."
Es DRY, te queda más limpia la vista, más limpio el controlador, y la
query es óptima. El día que necesites mostrar un campo más, lo agregas a
tu :select y listo.
Pegale un vistazo:
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001295
Salud y belleza para todos,
Mauro.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar