在控制器中:

@reminders = Reminder.find(:all, :conditions => ["group_id = ? and remind_at < ?", g.id, @three_days_ago])
@reminders.each do |r|
  r.remind_at = DateTime.now
end

@reminders.each(&:save!)
p "*** test ***"


这种方法在我的代码的另一部分中起作用,但是由于某种原因,没有错误消息,但是数据没有保存。这不是属性可访问的问题。测试消息正在控制台中打印,因此该过程不会跳过该部分代码。我的语法正确吗?

最佳答案

这应该可行,但这不是一种非常有效的处理方式。您可能会有大量的提醒,这可能需要多个GB的内存才能加载。获取任何内容的all本质上都是冒险的。

更好的解决方案是仅使数据库执行此操作:

Reminder.update_all(:remind_at => Time.now)


即使在很大的桌子上,此操作也应相当快地完成,不需要加载,调整,验证和保存每个模型。

10-08 00:36