Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中查询缓存仍然会对DB运行调用_Ruby On Rails_Ruby_Caching_Activerecord - Fatal编程技术网

Ruby on rails 在rails中查询缓存仍然会对DB运行调用

Ruby on rails 在rails中查询缓存仍然会对DB运行调用,ruby-on-rails,ruby,caching,activerecord,Ruby On Rails,Ruby,Caching,Activerecord,我可能遗漏了一些非常简单的东西,但我不明白是什么 我试图缓存一个简单的活动记录查询,但每次我触摸缓存时,它都会再次对数据库运行查询 控制器代码: products=Rails.cache.read(“搜索结果”) if产品 呈现:text=>products[0]。id 其他的 产品=产品。其中('name LIKE?,'Product_name?')) Rails.cache.write(“搜索结果”,产品) 结束 我可以看到,在第二次调用中,我访问的是if块,而不是else块,但每当我尝试

我可能遗漏了一些非常简单的东西,但我不明白是什么

我试图缓存一个简单的活动记录查询,但每次我触摸缓存时,它都会再次对数据库运行查询

控制器代码:

products=Rails.cache.read(“搜索结果”)
if产品
呈现:text=>products[0]。id
其他的
产品=产品。其中('name LIKE?,'Product_name?'))
Rails.cache.write(“搜索结果”,产品)
结束
我可以看到,在第二次调用中,我访问的是if块,而不是else块,但每当我尝试触摸产品(如渲染产品)时,我也会看到对DB的活动记录调用

我错过了什么?

这一行

products = Product.where('name LIKE ?", 'product_name?')
返回,但除非对其调用kicker方法,否则不会命中数据库

虽然我仍然建议使用我在上面的评论中提到的
fetch
,但请尝试将行更改为:

products = Product.where('name LIKE ?", 'product_name?').all
这将强制数据库命中,并将查询的实际结果保存到缓存中,而不是关系

products = Product.where('name LIKE ?", 'product_name?')
返回,但除非对其调用kicker方法,否则不会命中数据库

虽然我仍然建议使用我在上面的评论中提到的
fetch
,但请尝试将行更改为:

products = Product.where('name LIKE ?", 'product_name?').all

这将强制数据库命中,并将查询的实际结果保存到缓存中,而不是关系。

不是答案,而是考虑使用,而不是自己做读写。不是答案,而是考虑使用,而不是自己做读写。