Update_all或update_attribute不会更新该列

Bog*_*opa 1 ruby-on-rails update-attributes

我有一个状态报告,用户可以通过电子邮件发送该报告,我想在完成传递操作后将:sent_mail列更新为true。

def send_status
  date = Date.today
  reports = current_user.reports.for_date(date)
  ReportMailer.status_email(current_user, reports, date).deliver
  reports.update_all(sent_mail: true)
end
Run Code Online (Sandbox Code Playgroud)

和表类

AddSentMailToReports < ActiveRecord::Migration
  def change
    add_column :reports, :sent_mail, :boolean, default: false
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,在控制台中,send_mail仍然设置为false。有什么想法为什么不起作用?谢谢!

小智 5

这是因为update_all直接将更新发送到数据库-它不会更新内存中的报表模型。如果您在运行当前版本后检查数据库,则会看到记录已更新。

您需要在每个报表上调用“重新加载”以从数据库中获取更新的版本,或者

reports.map(&:reload)
Run Code Online (Sandbox Code Playgroud)

一口气完成它们。