簡體   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