Update_all或update_attribute不会更新列。
Update_all或update_attribute不会更新列。
我有一个用户可以通过电子邮件发送的状态报告,并且在交付操作完成后,我想将列:sent_mail更新为true。\n
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
\n和表类\n
AddSentMailToReports < ActiveRecord::Migration def change add_column :reports, :sent_mail, :boolean, default: false end end
\n然而,在控制台中,sent_mail仍然设置为false。有什么想法为什么不起作用?\n谢谢!
在上述内容中,提到了一个问题:“Update_all或update_attribute不更新列”。问题的出现原因是因为`reports`是一个`ActiveRecord::Relation`对象,而不是一个单独的记录。因此,不能使用`update_attribute`方法来更新列。
解决这个问题的方法是使用`update_all`方法来更新列。`update_all`方法可以直接对数据库中的所有匹配记录进行更新。通过传递一个哈希参数来指定要更新的列和值,可以轻松地更新多个列。
以下是解决方法的示例代码:
reports.update_all(sent_mail: true)
上述代码将会将`reports`中所有记录的`sent_mail`列更新为`true`。
另外,还提到了`update_attributes`和`update_attribute`之间的区别。`update_attributes`是一个实例方法,用于更新单个记录的多个列。它接受一个参数,包含要更新的列和值的哈希。而`update_attribute`是类似的方法,但它只能更新单个列。
在文章的最后,还提到了一个相关的问题,即“update_attribute vs update_attributes”。这个问题指出了`update_attribute`和`update_attributes`之间的区别,并给出了更多的解释。
通过理解`update_all`、`update_attributes`和`update_attribute`之间的区别,以及在特定情况下使用它们的正确方式,可以避免出现“update_all或update_attribute不更新列”的问题。
问题出现的原因是因为使用update_all或update_attribute方法更新列时,更新操作并没有生效。解决方法是使用update_attributes方法进行更新,或者尝试将代码改为Object.save != true。
在实际操作中,如果update_all或update_attribute方法无法正常工作,可以尝试使用update_attributes方法进行更新。例如,可以使用以下代码进行更新:
reports.update_attributes(:sent_mail => true)
如果仍然无法正常工作,可以尝试将代码改为Object.save != true。具体操作可以参考以下链接:apidock.com/rails/ActiveRecord/Base/update_all/class,并使用以下代码进行更新:
reports.update_all(:send_mail => true)
如果可能的话,还可以检查后台日志并发送相关日志信息进行进一步排查。