[英]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.