gpt4 book ai didi

ruby-on-rails - 在 Rails (PostgreSQL) 中批量更新个人记录

转载 作者:行者123 更新时间:2023-11-29 14:03:07 25 4
gpt4 key购买 nike

我偶然发现了更新一组记录的问题。

在我的数据库中

id | name   | info::hstore | friends[]::varchar 
1 | Claire | {} | []
2 | Mary | {} | []
3 | Bob | {} | []

我有一个哈希数组的例子:

[ 
{id: 1, name: "Claire", info: {age: 21, sex: 'f'}, friends: ['Mary', 'Bob']},
{id: 2, name: "Mary", info: {age: 16, sex: 'f'}, friends: ['Mike']},
{id: 3, name: "Bob", info: {age: 28, sex: 'm'}, friends: ['James']}
]

所有记录都已经在数据库中,我只想用散列中的列更新现有记录,散列都有相同数量的要更新的字段:姓名、信息和 friend 。

有一个gem active-record-import 但它只做插入。此外,#update_all 方法不起作用,因为我有单独的数据来根据 id 更新每条记录。不想进行原始 SQL 插入,因为我的行具有 Postgres hstore 和数组类型,不想进行大量数据操作。

可能有大约 10,000 - 100,000 条记录要更新。

环境:Postgres 9.4、Rails 3(如果 Rails4 中有好的解决方案,我们将不胜感激)

最佳答案

所以我不确定您目前所说的是否反对这种方法,但您可以这样做:

update_info = [{id: 1, name: "Claire", info: {age: 21, sex: 'f'}, friends: ['Mary', 'Bob']}, 
{id: 2, name: "Mary", info: {age: 16, sex: 'f'}, friends: ['Mike']},
{id: 3, name: "Bob", info: {age: 28, sex: 'm'}, friends: ['James']}
]

update_info.each do |row|
user = User.find(row[:id])
user.update(info: row[:info], friends: row[:friends])
end

这是将您的信息从哈希数组中获取到数据库中的唯一方法。使用 Postgres,您可以使用类似于连接的方式从另一个表进行批量更新。但是,如果您打算遇到所有这些麻烦,那么您应该在数据库控制台 psql 上或使用允许您执行 SQL 查询的 GUI 数据库程序来执行此操作。有些事情在数据库中做得更好,因为这是它的设计目的。

关于ruby-on-rails - 在 Rails (PostgreSQL) 中批量更新个人记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29200019/

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