Rails控制台报错:Sms类不存在each方法(NoMethodError)
错误原因分析
核心问题
报错 undefined method 'each' for Sms:Class (NoMethodError) 的直接原因是:你直接对 Sms 类本身调用了 each 方法,但 Sms 类并没有定义这个类方法。
详细解释
- 在 Ruby/Rails 场景中,
each是用于遍历可枚举对象(比如数组、集合、ActiveRecord::Relation 实例)的方法,而Sms是一个模型类,本身并非可枚举的集合对象。 - 你的代码逻辑有误——你真正需要遍历的是该模型对应的所有数据库记录,而非
Sms类本身。
修正方案
把 Sms.each 替换为 Sms.all.each,先通过 Sms.all 获取所有 Sms 记录的可枚举集合(ActiveRecord::Relation 对象),再调用 each 遍历:
Sms.all.each do |sms| sms.time_stamp = Time.at(sms.time_stamp_long / 1000) sms.save end
如果数据量较大,建议用 find_each 分批加载记录,避免一次性占用过多内存:
Sms.find_each do |sms| sms.time_stamp = Time.at(sms.time_stamp_long / 1000) sms.save end
内容的提问来源于stack exchange,提问作者bad-reputation
相关产品推荐
相关产品推荐

