添加而不是替换 SQL 数据库中的数字

问题描述 投票:0回答:1

我在使用 PostgreSQL 数据库向 Ruby on Rails 项目中添加先前的总和时遇到问题。基本上我需要发送补丁请求以添加当前总和,但不替换当前总和。

我尝试的一切都非常复杂,它涉及为每个补丁请求创建新条目并聚合它们。是否有一种简单的方法通过添加值而不是替换它来更新单个条目?前端是 React,我可以尝试在那里做数学。

谢谢,这真是令人头疼,我觉得有一个超级简单的解决方案。

sql reactjs ruby-on-rails postgresql activerecord
1个回答
0
投票

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

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

Rails 将创建一个 SQL 语句,将其中的任何值更新为 5(这对于避免竞争条件非常方便),而不是读取、添加 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
条件来限制这些更改的范围。

© www.soinside.com 2019 - 2024. All rights reserved.