我在使用 PostgreSQL 数据库向 Ruby on Rails 项目中添加先前的总和时遇到问题。基本上我需要发送补丁请求以添加当前总和,但不替换当前总和。
我尝试的一切都非常复杂,它涉及为每个补丁请求创建新条目并聚合它们。是否有一种简单的方法通过添加值而不是替换它来更新单个条目?前端是 React,我可以尝试在那里做数学。
谢谢,这真是令人头疼,我觉得有一个超级简单的解决方案。
如果需要更新单条记录,可以使用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
条件来限制这些更改的范围。