繁体   English   中英

来自关联对象的 Rails update_all

[英]Rails update_all from associated_object

我有一个 Glass 对象和一个 Prescription 对象,但我忘记为 Glass 对象添加时间戳,所以我创建了一个迁移来执行此操作。 然而,毫不奇怪,所有对象都有今天的日期和时间。

glass belongs_to :prescription prescription has_one :glass

但是,我可以从 Prescription 对象中获取正确的时间戳。 我只是不知道该怎么做。 所以我想做类似的事情

Glass.update_all(:created_at => self.prescription.created_at)

有任何想法吗 ?

最简单的事情就是多个 SQL 查询,这是一次性迁移,所以我认为没什么大不了的。 ActiveRecord update_all 旨在使用相同的值更新匹配的记录,这样就不起作用了。

Glass.all.find_each do |glass|
   glass.update!(created_at: glass.prescription.created_at)
end

如果您想要一个查询(基于连接的更新 - 用 sql 术语称为“更新自”),ActiveRecord 中似乎并不简单(应该在 MySQL 上工作,但不能在 Postgres 上工作) https://github.com/rails/rails/issues /13496编写原始 SQL 会更容易 - 这可以帮助您入门https://www.dofactory.com/sql/update-join

您可以使用触摸方法

Prescription.find_each do |prescription|
  prescription.glass.touch(:created_at, time: prescription.created_at)
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM