【发布时间】:2014-11-12 12:14:18
【问题描述】:
我遇到了一个我不知道如何解决的问题。我是 Ruby 和 Rails 的新手,肯定有一种简单的方法可以实现我正在寻找的东西。
这是show 视图的ERB,显示两条相等的线:
<p><%= @user.foo %></p>
<p><%= @user.foo %></p>
想象foo 是一种密集的计算方法,所以我想缓存第一次调用的结果,以便在第二行中使用它,而不必再次调用foo。最简单的选择是定义一个变量并缓存它:
<% foo_cache = @user.foo %>
<p><%= foo_cache %></p>
<p><%= foo_cache %></p>
但我不想弄乱“全局”范围。更好的方法是 foo 本身可以保存第一次调用时返回的值的缓存:
def foo
return self.cached_foo if self.cached_foo #WARNING: pseudocode here!
#Not cached. Do stuff
...
self.cached_foo = computed_value
computed_value
end
我的问题是,是否可以在不干扰背后模型的情况下动态地将数据附加到对象实例(即不让save 和公司函数处理这些附加数据)。或者也许有另一种更好的方法来实现我正在寻找的东西?
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby memoization