Update_all或update_attribute不更新列(Update_all or upda

2019-09-23 01:20发布

我有一个状态报告,用户可以通过电子邮件发送,我想更新一列: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.Any想法为什么不起作用? 谢谢!

Answer 1:

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

你需要调用“刷新”每个报告从数据库中获取更新版本或

reports.map(&:reload)

做他们都在一气呵成。



Answer 2:

如果update_all或update_attribute不工作,你可以使用这个

reports.update_attributes(:sent_mail => true)


Answer 3:

参考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



文章来源: Update_all or update_attribute doesn't update the column