如何完全重新加载ActiveRecord?

mar*_*nza 7 ruby activerecord rspec ruby-on-rails

在RSpec测试中,我创建了一个具有多个memoizied值的记录.

foo.reload 对于对象的属性按预期工作,但仍然存在已记忆的属性.

到目前为止,它通过完全重新创建对象来工作:foo = Foo.find(123)但在我的情况下,查找记录的逻辑实际上更复杂.

什么是完全重新加载记录并擦除所有记忆值的好方法?

mea*_*gar 7

好的方法是您已经拥有的方法:完全重新创建对象。

您无法以任何简单的“Rails”方式“重新加载”对象的记忆值,因为记忆属性不是 Rails 或 ActiveRecord 的功能。两人都不知道你是如何记忆方法的。


Mic*_*ant 5

您可以通过重新定义reload. 例如,如果你使用记忆,||=你可以这样做:

class Foo < ActiveRecord::Base
  def bar
    @bar ||= rand
  end

  def reload
    @bar = nil
    super
  end
end
Run Code Online (Sandbox Code Playgroud)

有关重置所有实例变量的方法,请参阅是否有一个干净的 API 用于在 ActiveRecord 中的“重新加载”时重置实例变量?

如果你使用memoist gem,你可以flush_cache在那里打电话。