Update_all或update_attribute不会更新列。

10 浏览
0 Comments

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谢谢!

0
0 Comments

在上述内容中,提到了一个问题:“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不更新列”的问题。

0
0 Comments

问题出现的原因是因为使用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)

如果可能的话,还可以检查后台日志并发送相关日志信息进行进一步排查。

0
0 Comments

update_all或update_attribute不会更新内存中的报告模型,而是直接发送更新到数据库。因此,如果在运行更新操作后检查数据库,您会发现记录已经被更新。要获取从数据库中获取的更新版本,您需要在每个报告上调用'reload'方法,或者使用reports.map(&:reload)一次性更新所有报告。在Rails 6.0.4版本中,也可以使用reports.reload来代替映射和重新加载每个记录的方法。

0