You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails seeds.rb执行终端评论数显示为0,实际数据库存在数据的问题

问题根源:Rails查询缓存的“小陷阱”

你遇到的这个情况,十有八九是Rails的查询缓存在作祟。当你在seeds.rb里执行Comment.all.length时,如果之前的代码里已经调用过Comment.all(哪怕是不小心触发的),Rails就会把那次的空结果缓存起来。后面哪怕你创建了一堆评论数据,再次调用Comment.all.length时,它直接就用缓存里的空数组长度了,根本不会去数据库重新查一遍。

而到了dbconsole或者pry控制台,这是全新的进程,没有之前的缓存残留,自然能查到真实的数据。

解决办法,选一个就行

1. 用count代替length

Comment.count会直接给数据库发一个SELECT COUNT(*)的SQL请求,完全不依赖Rails的查询缓存,拿到的就是实时的数量:

puts "Created #{Comment.count} comments..."

2. 强制绕过缓存重新查询

要是你非得用all,可以加个reload强制刷新数据:

puts "Created #{Comment.all.reload.length} comments..."

或者用unscoped跳过所有作用域和缓存:

puts "Created #{Comment.unscoped.all.length} comments..."

3. 检查代码顺序

最后再确认下你的puts语句是不是放在所有评论数据创建完成之后的,要是不小心把输出写在创建代码前面,那输出0就太正常了😂

内容的提问来源于stack exchange,提问作者achacttn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:52