gpt4 book ai didi

ruby-on-rails - 在 Rails 中更新数据库中的多行,每行都具有唯一值

转载 作者:行者123 更新时间:2023-11-29 13:12:30 24 4
gpt4 key购买 nike

我已经广泛研究了这个,但我似乎找不到我需要的答案。

我熟悉 Rails 事务,但在这种情况下,一个事务会执行多个查询,我宁愿不这样做。

在单个查询中,如何使用唯一值更新多行的同一列?

例如:

update_hash =  {1: 'Bandits on the High Road', 2: 'Broccoli: The Menace'}
Books.where(<id_is_in_update_hash_keys>).each do |b|
matching_hash_key = b.id
new_title = update_hash[:matching_hash_key].value
# problem here because each update is a query
b.update(title: new_title)
end

当然,我可以将它包装在一个事务中,但是 10k 本书仍然调用 10k 查询。我使用 Postgresql,但我不知道在单个查询中为多个对象更新该字段的正确、惯用的方法。数据已经过预先审查,因此永远不需要运行验证。

如果有人知道要执行的 Rails 代码,或者更可能是我需要生成的 Postgresql 查询,我将不胜感激。

最佳答案

使用 PostgreSQL 可以使用这样的查询:

update_hash = { 1: 'Bandits on the High Road', 2: 'Broccoli: The Menace' }
values = update_hash.map { |k, v| "(#{k}, #{ActiveRecord::Base.connection.quote(v)})" }.join(', ')

query = "
UPDATE books T
SET title = uv.new_title
FROM (VALUES #{values}) AS uv (id, new_title)
WHERE T.id = uv.id::int"

ActiveRecord::Base.connection.execute(query)

关于ruby-on-rails - 在 Rails 中更新数据库中的多行,每行都具有唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com