2010/7/31 Instr. Dwayne Macgowan <[email protected]> > 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 => :schedulabley 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
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
