que tienen un módulo que estoy incluyendo en varios modelos con este contenido:¿Cómo utilizar siempre la clase base e ignorar STI en los rieles?
self.class.find_by_foo(bar)
Todo estaba bien hasta que empecé a usar STI. Esa línea siempre debe generar la consulta
select * from table where foo=bar"
y no
select * from table where foo=bar AND type="Whatever"
¿Existe una manera sencilla de evitarlo?
Pensé en dos soluciones. Subiendo por la jerarquía de clases hasta que encuentre el más alto-clase antes ActiveRecord::Base
o ejecutar la consulta con la mano, como:
self.class.find_by_sql("select * from #{self.class.table_name} where foo=bar")
No me gusta cualquiera de las soluciones. Hay alguno mejor?
En Rails 4 'self.class' devolvió inesperadamente la clase padre de los objetos, en Rails 5' self.class' returns, como excepción, la clase de modelos. 'self.class.base_class' se puede usar para obtener la clase padre. – Kris