【发布时间】:2009-03-26 07:14:28
【问题描述】:
我有一个模型,出于性能原因,我想存储关联对象的 ID(非规范化)。我有一个看起来像这样的方法:
def cache_ids
self._tag_ids = self.tag_ids
end
我以为我可以在 before_save 上运行它,但是有一个问题 - 一些关联的对象可能是新记录,因此它们不会有 id。
然后我切换到after_save,但是显然这个回调也是在事务提交之前触发的,所以ids仍然没有设置。
当时我的结局是:
def save_with_idcache(*args)
return false unless save_without_idcache(*args)
cache_ids
return save_without_idcache(false)
end
alias_method_chain :save, :idcache
这似乎可行,但看起来不是很优雅。
有没有更好的方法?比如,对象和关联对象都保存后的回调?
也许我遗漏了一些明显的东西。
【问题讨论】:
-
不是 100% 确定您要做什么,但我觉得有点味道。获取关联元素的 id 可以通过单个查询完成 ... ?
-
我同意 Toby 的观点,您可以在单个查询中拉回关联的对象或 ID。缓存它们的驱动程序是什么?
标签: ruby-on-rails ruby activerecord