我想使用單個查詢來使用Ruby哈希或數組更新Postgres數據庫中的很多記錄,而不是遍歷每條記錄並單獨調用更新。單個Postgres查詢使用本地哈希/數組更新許多記錄
# {:id => :color}
my_hash = {
1 => 'red',
2 => 'blue',
3 => 'green'
}
如何,我不想這樣做,因爲它做了三個查詢:
my_hash.each do |id, color|
MyModel.where(id: id).update_all(color: color)
end
如何我也想這樣做:
MyModel.connection.execute <<-SQL
UPDATE my_models
SET color=something
FROM somehow_using(my_hash)
WHERE maybe_id=something
SQL
看起來像它的工作,但創建和銷燬表似乎是一個很大的開銷(是嗎?),它似乎有點笨拙做必要的文本交易:my_hash.map {| ID,色| 「當#{id}然後'#{color}'」} join(「\ n」) – LikeMaBell
我明白了。事實上,我不是一個紅寶石用戶,也不知道它的能力。但是,我認爲第三種選擇可能會有用。查看更新後的答案。 – klin