Eso puede andar, Emilio. Yo había pensado meterme en AR justo cuando enumera las columnas de la tabla para ahí mismo omitirle las que no correspondían y así evitar toda la automagia de ActiveRecord. Tanta magia a veces molesta. Con 'magia' me refiero a todo lo que hace por detrás sin que haya que declarar nada. Quería evitar que inclusive me mostrara todos los campos incorrectos al hacerle un inspect al objeto.
Con otros ORMs (no tan mágicos) hay que ser más específico, lo cual en algunos casos me resulta mejor. De cualquier manera lo resolví mejor con DataMapper, que funciona realmente bien. Gracias por responder, obviamente. Siempre es bueno escuchar otras campanas... Lucas Florio Developer ---- Personal: http://www.lucasefe.com.ar/ 2009/7/16 Emilio Tagua <[email protected]> > 2009/7/14 Lucas Florio <[email protected]>: > > Buenas, Rubias > > > > Estoy teniendo el siguiente tema. Quiero implementar STI pero quiero > evitar > > que se muestren los campos/atributos que no corresponden a una clase > > específica. El ejemplo sería este: > > > > class Componente < AR::Base > > # nombre: string > > end > > > > class ComponenteUno < Componente > > # campo1 > > end > > > > class ComponenteDos < Componente > > # campo2 > > # campo3 > > end > > > > La Tabla componentes contiene a todos los campos (nombre, campo(1..3)). > > La idea es que ComponenteDos.new no responda a campo1. > > Y que ComponenteUno no responda a campo2 ni a campo3. > > Yo me había imagino un mixin de esta forma, pero no se si existe algo así > > ya: > > > > class ComponenteDos < Componente > > properties :campo2, :campo3 # y que te oculte lo demás > > # Sé que con DataMapper seguramente lo pueda hacer, pero quería > > intentarlo con AR antes. > > end > > > > Alguna idea? Saben de algo así? > > Y que tal un poco de metaprogramación... > > class Componente > attr_accessor :campo1, :campo2, :campo3, :campo4 > end > > class ComponenteDos < Componente > DENIED_PROPERTIES = ["campo3", "campo4"].freeze > > for property in DENIED_PROPERTIES > class_eval %{ > undef_method "#{property}" > undef_method "#{property}=" > } > end > end > > class ComponenteTres < Componente > end > > c = ComponenteDos.new > c.campo1 # => nil > c.campo2 # => nil > c.campo3 # => NoMethodError: undefined method `campo3' for > #<ComponenteDos:0x1b3b608> > c.campo4 # => NoMethodError: undefined method `campo3' for > #<ComponenteDos:0x1b3b608> > > c = ComponenteTres.new > c.campo4 # => nil > > No se que te parezca pero podría ser algo asi... > > Saludos! > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar >
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
