使用匿名类进行rails缓存

时间:2015-03-03 16:46:17

标签: ruby caching ruby-on-rails-4 model-view-controller

我想在片段缓存中缓存几个大型查询的结果。

我可以将值存储在哈希中,然后在发出请求之前检索它们,但是我想知道在实际需要数据之前是否可以推迟处理请求。

以下是之前的代码:

# controller

class MyController < ApplicationController
  def my_action
    @my_huge_query_with_1_result = do_massive_question
  end
end

# my_action.html.slim

.header
  = cache do
    ' Your answer is
    = @my_huge_query_with_1_result

这就是我想用匿名对象看起来的代码。但是,我无法弄清楚如何传递参数。

# controller

class MyController < ApplicationController
  def my_action
    @my_cache = Object.new
    def @my_cache.do_query
      do_massive_question(params) # this fails; because params is not in the scope of @my_cache's class.
    end
  end
end

# my_action.html.slim

.header
  = cache do
    ' Your answer is
    = @my_cache.do_query

有没有人想过如何将处理推迟到最后?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

执行此操作的典型方法是使用Procs / lambdas。然后,您将使用#call调用它。

def my_action
  @my_huge_query_with_1_result = ->{ do_massive_question(params) }
end

# View
.header
  = cache do
    ' Your answer is
    = @my_huge_query_with_1_result.call