mar*_*nza 7 ruby activerecord rspec ruby-on-rails
在RSpec测试中,我创建了一个具有多个memoizied值的记录.
foo.reload 对于对象的属性按预期工作,但仍然存在已记忆的属性.
到目前为止,它通过完全重新创建对象来工作:foo = Foo.find(123)但在我的情况下,查找记录的逻辑实际上更复杂.
什么是完全重新加载记录并擦除所有记忆值的好方法?
好的方法是您已经拥有的方法:完全重新创建对象。
您无法以任何简单的“Rails”方式“重新加载”对象的记忆值,因为记忆属性不是 Rails 或 ActiveRecord 的功能。两人都不知道你是如何记忆方法的。
您可以通过重新定义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在那里打电话。
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |