2012-09-26 68 views
1

我有一個用戶可以通過電子郵件發送的狀態報告,我希望在發送操作完成後將列sent_mail更新爲true。Update_all或update_attribute不會更新列

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想法爲什麼不起作用? 謝謝!

回答

0

如果update_a LL或update_attribute不工作,你可以使用這個

reports.update_attributes(:sent_mail => true) 
+0

它仍然不起作用。我想知道將它改爲Object.save!= true –

+0

請參閱此鏈接。 http://apidock.com/rails/ActiveRecord/Base/update_all/class 並使用它 - reports.update_all(:send_mail => true) - 在可能的情況下檢查後臺日誌是否發送該日誌 –

4

這是因爲update_all直接發送更新到數據庫 - 它不會更新你的內存有報表模型。如果您在運行當前版本後檢查數據庫,則會看到記錄已更新。

你需要調用每個報告的「刷新」,以從數據庫中獲取或更新版本

reports.map(&:reload) 

做他們都在一氣呵成。