Ho un modulo che sto anche in diversi modelli con questo contenuto:Come utilizzare sempre la classe base e ignorare STI in Rails?
self.class.find_by_foo(bar)
Tutto andava bene fino a quando ho iniziato ad usare STI. Quella linea dovrebbe sempre generare la query
select * from table where foo=bar"
e non
select * from table where foo=bar AND type="Whatever"
C'è un modo semplice per evitarlo?
Ho pensato a due soluzioni. Salendo la gerarchia delle classi fino a quando ho trovato la parte superiore più di classe prima di ActiveRecord::Base
o funzionare la domanda a mano, come:
self.class.find_by_sql("select * from #{self.class.table_name} where foo=bar")
Non mi piacciono entrambe le soluzioni. C'è uno migliore?
In Rails 4 'self.class' ha restituito inaspettatamente la classe genitore degli oggetti, in Rails 5' self.class' restituisce, come escluso, la classe dei modelli. 'self.class.base_class' può essere usato per ottenere la classe genitore. – Kris