ruby-on-rails ADD不是替换SQL数据库中的数字

omvjsjqw  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(87)

我在使用PostgreSQL数据库添加到Ruby on Rails项目中的前一个总和时遇到问题。基本上我需要发送一个补丁请求添加到当前的总和,而不是取代当前的总和。
我所尝试的一切都非常复杂,它涉及到为每个补丁请求创建新条目并聚合它们。有没有一种简单的方法可以通过添加值而不是替换值来更新单个条目?前端是React,我可以尝试在那里做数学。
谢谢,这是一个真实的头痛,我觉得有一个超级简单的解决方案。

sg3maiej

sg3maiej1#

如果您需要更新单个记录,您可以使用ActiveRecord提供的increment!方法:

item = Item.find(1234)
item.increment!('my_column', 5)

而不是阅读,添加5,并保存,Rails将创建一个SQL语句,将更新任何值5(这是非常方便的,以避免竞争条件):

UPDATE 
  "items" 
SET 
  "my_column" = COALESCE("my_column", 0) + 5 
WHERE 
  "tracking_infos"."id" = 1234

相反,如果你想更新多个(可能是所有)元素,你可能需要自己构建SQL查询,并要求Rails为你执行它:

ActiveRecord::Base.connection.execute(
  "UPDATE items SET my_column = COALESCE(my_column, 0) + 5"
)

请记住,此命令将在表的每条记录上递增my_column的值。您可能希望包括其他WHERE条件以限制这些更改的范围。

相关问题