Mic*_*ant 6 ruby-on-rails memoization presenter ruby-on-rails-3
问题:尽可能避免创建多个对象或多个查询.
我正在使用带有rails的Presenters作为最佳实践.
我遵循的建议说,使用"扩展ActiveSupport.Memoizable"(然后使用memoize:方法来使用它们)比使用@the_record = record ||= @record样式设置项目更好,因为有几个问题 - 假或没有得到存储,以便再次调用查询,并且memoizable更好地使用缓存(即使用它!).
但是我看到memoizable在rails 3.1中被弃用了.我在运载波下使用github并使用语句:"DEPRECATION WARNING:不推荐使用ActiveSupport :: Memoizable,并且将在以后的版本中删除,只需使用Ruby memoization模式.(来自extend at /Users/kain/.rvm/gems/ruby-1.9.3-preview1/bundler/gems/carrierwave-c4459179b0f8/lib/carrierwave/mount.rb:284" .
也许它已经解决了?谁知道?
关于最佳实践的任何建议?使用|| =语法?上述问题怎么样?

该||=方法非常适用于返回值为true的值的东西,但对于没有返回值的东西,它不能很好地工作.memoize通过捕获这些条件并相应地返回来解决这个问题.如果你想要适应,你可以采取这样的方法nil:
def some_method
return @some_method if (instance_variable_defined?(:"@some_method"))
@some_method = begin
...
end
end
Run Code Online (Sandbox Code Playgroud)
这只是检查变量是否已定义,而不是是否已设置,这在您的情况下是一个重要的区别.
我不确定你为什么认为它被弃用[来自Michael的注释,它在3.2中被弃用,见下面的注释].该文件表明,它仍然在3.1电流.有时实现在从一个模块移动到另一个模块时被标记为"已弃用",但该工具仍然可用.
| 归档时间: |
|
| 查看次数: |
3087 次 |
| 最近记录: |