> Hola otra vez lista!
>>
>> Disculpes mis molestias :-P
>>
>> Quería ver si a alguno se le ocurre una manera mejor de resolver lo
>> siguiente:
>>
>> Cuál es la mejor manera de unir en una misma tabla elementos de varios
>> modelos?
>>
>> Por ahora lo resolví "sumando" las diferentes asociaciones con un map{}
>> que arma hashes igual.es
>>
>> class Person << ActiveRecord::Base
>>
>>
>>
>>
>> ...
>> def dashboard
>> ds = self.interviews.all.map{|i| {:when => i.when, :observations =>
>> i.obs}} +
>>
>>
>>
>>
>> self.followups.all.map{|f|{:when => f.date, :observations => f.notes}}
>> + ....
>>
>>
>>
>>
>> return ds
>> end
>> ...
>>
>>
>>
>>
>> end
>>
>> Por ahora funciona, pero definitivamente tiene que haber una manera mejor
>> :-P
>>
>> Un problema, por ejemplo, es que a esto no le puedo aplica will_paginate
>> con facilidad.
>>
>
> Por un lado, resolverlo de esta manera va a ser siempre complicado. Podrías
> "ayudar" a ActiveRecord escribiendo partes del SQL a mano (pero no creo que
> el resultado sea bueno, habría que ver cómo lo vas a usar, dudo que logres
> hacerlo transparente).
>
> Pero me huele a que hay algún problema de diseño. En principio, si es común
> que necesites tratar a estas dos entidades de manera polimórfica, como si
> fuesen lo mismo, y las entidades (Interview y Followup) tienen estructura y
> responsabilidades en común, sería preferible utilizar STI (Single Table
> Inheritance, usarías herencia en tus clases de Ruby y en la tabla estarían
> las columnas de las dos entidades, además de una columna "type" que los
> discrimina).
>
> En caso de que no tenga sentido usarlas polimórficamente (por que son dos
> entidades bien distintas), probablemente lo que esté faltan sea factorizar
> un entidad entidad en común (con lo que veo, se me ocurre Event que tiene
> when y notes, de manera). Aquí usarías un has_many polimórfico, esto es,
> Interview.has_many
> :events, :as => :schedulable, Followup.has_many :events, :as =>
> :schedulable y Event.belongs_to :schedulable, :polymorphic => true). De
> esta manera podés listar Events sin problemas (sentite libre de elegir un
> mejor nombre que schedulable).
>
> Depende de tus requerimientos. Lo importante es que si necesitás manejarlos
> "juntos" lo reflejes en la estructura de tu modelo.
>
> Saludos,
>
> Nacho
>
> _______________________________________________
>
Lo que yo haría es hacer una vista en la base de datos (de esas que se hacen
con CREATE VIEW) y mapearía esa vista, como si fuese una tabla, en una clase
que hereda de ActiveRecord::Base. Entonces will_paginate debería andar
transparentemente, ya que para Rails esa vista sería igual que una tabla
común.
Mis 2 centavos,
Aureliano.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar