我想在片段缓存中缓存几个大型查询的结果。
我可以将值存储在哈希中,然后在发出请求之前检索它们,但是我想知道在实际需要数据之前是否可以推迟处理请求。
以下是之前的代码:
# 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
有没有人想过如何将处理推迟到最后?
提前谢谢!
答案 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