Rails 如何更新数据库中具有重复 id 的记录

3

我有一个数据库,其中的记录可能会有与同一id匹配的其他记录(是的,确实会有这种情况)。

我有一行使用标准Rails更新的代码:

Member.update(record.id, values)

当前的更新方式会将所有具有该id的记录全部更新(不太好)。根据文档,您只能提供一个id(或一个id数组)。

https://apidock.com/rails/ActiveRecord/Base/update/class

我需要能够指定一个id和另一个id来获取唯一的记录。类似于:

Member.update({id: record.id, crew_id: record.crew_id}, values)

怎样才是最好的做法?

1个回答

3
我想这可能是您正在寻找的内容。
Member.where(id: record.id, crew_id: record.crew_id).update_all(values)

遗憾的是这并不起作用。where 只获取到一条记录,但 update 仍然影响了所有具有相同 id 的记录。 - Mirror318
如果没有获取到1条记录,它会根据条件获取所有匹配的记录。只有find方法可以获取1条记录。 - MD Tawab Alam Khan
我是指通过添加类似crew_id:record.crew_id的选择器,where语句仅获取1条记录。但在一个记录上调用update仍会更新数据库中具有相同ID的所有记录。 - Mirror318
更新方法被调用在where子句获取的每条记录上。请您再检查一遍? - MD Tawab Alam Khan
是的,已经检查过了,无论获取多少条记录都没有关系。update 在 SQL 查询中创建了一个 where id = 1234 子句,这将影响所有具有该 ID 的记录。 - Mirror318
据我理解,from方法返回一个ID数组。然后针对每个记录分别调用update方法。另一方面,update_all创建了一个单一的查询。 - MD Tawab Alam Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接