2008/7/7 Eduardo Trápani <[EMAIL PROTECTED]>:
> No sabía qué era un lambda, así que lo estudié. No me doy cuenta cómo se
> podría usar ...
Por ejemplo en el nuevo named_scope, podés hacer lo siguiente:
name_scope :activos, :conditions => [:activo => "1"]
Entonces en tu modelo haces Modelo.activos, y es lo mismo que si
hicieras un find con la condición, la ventaja aparte del nombre lindo
y el encapsulamiento, es que podés encadenrlos, podrías hacer
Modelo.activos.de_hoy, incluso al final le podés agegar un find común.
Pero, suponete que el scope "de_hoy", signifique que la columna fecha
sea igual a la fecha actual:
named_scope :de_hoy, :conditions => ["date(fecha) = ?",
Time.today.to_date.to_s(:db)]
El problema es que Time.today.to_date.to_s(:db) se evalúa en la
creación del scope, por lo tanto queda fijo, y no se actualiza con el
paso del tiempo, la forma correcta de hacerlo sería:
named_scope :de_hoy, :conditions => "date(created_at) =
'#{Time.today.to_date.to_s(:db)'"
Donde la fecha se evalúa cada vez, por estar en una cadena con
comillas dobles, ahora si necesitas parámetros (como en tu caso),
tenés que hacer algo así:
named_scope :desde, lambda { |dia|
{ :conditions => "date(created_at) >= '#{desde.to_date.to_s(:db)}'" } }
Que se invoca como Modelo.desde(fecha). En este caso no es dinámico,
pero hay que usar lambda para los parámetros.
En tu caso, si querés evitar la variable de instancia y usar un
parámetro, tendrías que hacer algo similar, pero no se me ocurre ahora
la manera directa de aplicaro.
Con respecto al problema original, lo había entendido al revés, en
este momento estoy leyendo que lo resolviste y a lo mejor lo anterior
te sirve para tu nueva duda.
Lucas.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar