Hola Gente,

Andan bien ?

Quería consultarles a los más experientes a ver si les ha pasado el
siguiente problema con has_and_belongs_to_many:

Mi idea es tener un modelo Article con el siguiente código, a modo de
ejemplo:

class Article < ActiveRecord::Base
..
  has_and_belongs_to_many :lista, :class_name => self.name,
    :finder_sql => 'SELECT articles.* FROM articles WHERE articles.id =
#{id}'

...
end

Como notaran la sentencia sql del finder_sql esta en single_quotes para ser
evaluada como parte del Object-life cycle y no al momento de que se carga la
clase.

Hasta ahi todo báraro, si lo pruebo con una única instancia, lease:

>> a = Article.find(1)
>> l1 = a.lista => me devuelve una lista con el mismo objeto => OK

Ahora si, continuo probando (obtengo otra instancia de Article)...

>> b = Article.find(2)
>> l2 = b.lista => me devuelve la misma lista q l1 (l1 == l2, un único
elemento con id igual a a.id)

Pq????

Por lo q pude ver, se evalúa la "lista" solo la primera vez q se ejecuta,
por lo tanto se remplaza #{id} por a.id y así queda 'hardcoded' la sql,
luego cuando consulto por b.lista se ejecuta la misma sentencia sql que para
el caso de a.lista (en su lugar, me agradaría que se remplazara #{id} por
b.id)

Curioso: Si utilizo el mismo :finder_sql para el caso has_many funciona como
espero...l1 != l2.

...muy extraño....si tienen alguna idea..

saludos y gracias,
  Marcelo
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a