2008/6/25 Eduardo Trápani <[EMAIL PROTECTED]>:
> Supongo que tiene que haber una manera más elegante.  Probé la de abajo y
> funciona, salvo para el campo contratista.nombre.  Funciona tanto 'campo'
> como :campo pero no sé si hay manera de pedirle un campo de un objeto
> asociado (y no sé si es más "a la ruby").

Eduardo,

Quizás estás buscando un helper...

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.

<%= table_for :contratos %>
<%= table_for :contratos, %w{fecha contratista desde hasta}, :headers => true %>

Con respecto al eval, este helper te permite hacer:

<%= table_for :contratos, [:fecha, lambda {|c| c.contratista.nombre },
:desde, :hasta] %>

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
ejemplo, nombre). Este helper y ERb en general siempre llaman al
método to_s de todo lo que tratan de imprimir, entonces es una buena
práctica definirlos (además por un tema de DRY):

<%= @contratista %>

es lo mismo que

 <%= @contratista.to_s %>

entonces si en tu clase Contratista tenés un def to_s; nombre; end
todo queda más bello. Y podés usar el helper sin el lambda.

Si te interesa instalar los helpers que te pasé:

sudo gem install djanowski-rails_basic_helpers --source=http://gems.github.com

Y en tu config/environment.rb:

config.gem 'djanowski-rails_basic_helpers'

Si sólo te interesa chusmear/copiar el código:
http://github.com/djanowski/rails_basic_helpers/tree/master/lib/basic_helpers.rb

Espero que sirva.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a