Update_all或update_attribute不更新列

时间:2012-09-26 09:19:54

标签: 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

和表类

AddSentMailToReports < ActiveRecord::Migration
  def change
    add_column :reports, :sent_mail, :boolean, default: false
  end
end

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

3 个答案:

答案 0 :(得分:4)

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

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

reports.map(&:reload)

一次完成所有这些。

答案 1 :(得分:0)

如果update_all或update_attribute不起作用,您可以使用此

reports.update_attributes(:sent_mail => true)

答案 2 :(得分:-1)

参考update_allupdate_attributesupdate_attribute

更改

reports.update_all(sent_mail: true)

reports.update_attribute('sent_mail', true)

update_attribute和update_attributes update_attribute vs update_attributes

之间存在差异