我想在某些情况下覆盖 ActiveRecord 的关联方法(与缓存间接belongs_to
关系的外键有关。一个典型的例子是 a QuoteStop
has aStop
和 a Stop
has aPostalCode
我也想postal_code_id
在QuoteStop
级别缓存。
对于这个例子,我想添加如下内容:
class QuoteStop
attr_accessible :stop_id, :postal_code_id
belongs_to :stop
belongs_to :postal_code
def postal_code_id
self[:postal_code_id] or postal_code_id!
end
def postal_code_id!
self.postal_code_id = stop.postal_code_id
end
def postal_code
self[:postal_code_id] ? super : PostalCode.find(postal_code_id) if postal_code_id
end
end
class Stop
attr_accessible :postal_code_id
end
问题是这似乎绕过了postal_code
. 例如,以下将产生 n+1 个查询,而它应该只产生 2 个。
QuoteStop.includes(:postal_code).limit(n).collect { |qs| qs.postal_code.name }
如何在不牺牲 ActiveRecord 缓存的性能增益的情况下使用此技术?