Pregunta ¿Cómo convertir un objeto ActiveRecord a otra clase cuando se usa STI?


Actualmente estoy usando la herencia de tabla única de ActiveRecord.

¿Cómo puedo elegir uno de mis modelos del tipo A al B? Ellos tienen el mismo padre.


20
2017-08-06 21:30


origen


Respuestas:


#becomes es lo que estás buscando:

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-becomes


40
2017-08-06 22:59



No es necesario que realice el lanzamiento, ya que Ruby no realiza ningún tipo de comprobación en tiempo de compilación. ¿Qué está tratando de lograr?

Digamos que tienes una clase Dady clases de niños Son y Daughter.

Podrías tener una @dad variable y almacenar en ella una Son o Daughter objeto, y simplemente tratarlo como si fuera un Dad. Siempre y cuando respondan a los mismos métodos, no hay diferencia. Este es un concepto llamado "pato escribiendo".


5
2017-08-06 22:23



Cree una nueva instancia de B para establecer los valores de los atributos que comparte con A.

Algo como:

class C < ActiveRecord::Base
end

class A < C
end

class B < C
end

@a = A.new(...)
@b = B.new(@a.attr1, @a.attr2, ..., @a.attrN)

-2
2017-08-06 21:52