Yo uso algunos muy básicos para arrancar las aplicaciones, lo podés
ver en http://github.com/djanowski/rails_basic_helpers. Por ahora moví
al repo lo que vos estás buscando, los helpers de tablas.
Ta, lo acabo de ver. ¡Bárbaro!
Tengo un problema sin embargo (puede ser que semánticamente una tabla no deba
ser así). En mi tabla tengo:
<table>
<tr>
<th>Nombre</th><td>Ana Kournikova</td>
</tr>
<tr>
<th>Profesión</th><td>Tenista</td>
</tr>
</table>
O sea, cada campo tiene su propia línea, con el header a la izquierda y no
todos los th arriba.
A tu código le agregué una opción, :single_horizontal y ahora hace lo que
quiero. En general recibe sólo un registro, pero si recibe varios arma una
tabla para cada uno, con un renglón por campo cada una. Se aprecian
sugerencias sobre cómo mejorarlo.
def table(source, options = {})
return nil if source.blank?
html = ''
headers = options[:headers]
single_horizontal = options[:single_horizontal]
if headers and not single_horizontal
html << content_tag(:thead,
content_tag(:tr,
(headers == true ? source.delete_at(0) : headers).map {|col|
content_tag(:th, col) }
)
)
end
if single_horizontal
label = source.shift
source.inject(html) do |buffer,row|
rows = ''
row.each_index {|i| rows << content_tag(:tr,content_tag(:th,label[i]) +
content_tag(:td,row[i]))}
buffer << content_tag(:table,rows)
end
html
else
source.inject(html) do |buffer,row|
buffer << content_tag(:tr, row.map {|col| content_tag(:td,
*(Array(col))) })
content_tag(:table, html, options)
end
end
De todas maneras, en tu caso te recomiendo que definas el método #to_s
en todos tus modelos y que devuelvas algo lógico para tu modelo (por
Sí, buena idea. Me acuerdo que con el scaffolding había que definir name, si
no había una columna con ese nombre. Pero esto es mejor, porque todos lo usan.
Gracias.
Eduardo.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar