我有我包括多種型號與此內容模塊:如何在Rails中始終使用基類並忽略STI?
self.class.find_by_foo(bar)
一切都很好,直到我開始使用STI。該行應始終生成查詢
select * from table where foo=bar"
和不
select * from table where foo=bar AND type="Whatever"
有沒有一種簡單的方法來避免呢?
我雖然有兩種解決方案。走了的類層次結構,直到我找到ActiveRecord::Base
前的最頂層類或手動運行查詢,如:
self.class.find_by_sql("select * from #{self.class.table_name} where foo=bar")
我不喜歡任何一個解決方案。有更好的嗎?
在Rails 4中'self.class'出乎意料地返回了對象父類,在Rails 5'self.class'中返回,例外的是models類。 'self.class.base_class'可以用來獲取父類。 – Kris 2017-11-13 10:28:23