我偶然发现了更新一组记录的问题。
在数据库中我有
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']}
]
所有记录都已经存在于DB中,我只想更新现有的哈希列,哈希都有相同数量的字段要更新:名称,信息和朋友。
有一个gem active-record-import但它只插入。此方法#update_all也不起作用,因为我有个别数据来更新每个记录,具体取决于id。 不想制作原始SQL插入内容,因为我的行包含Postgres hstore和数组类型,不想进行大量数据操作。
可能会有大约10,000 - 100,000条记录需要更新。
环境:Postgres 9.4,Rails 3(如果在Rails4中有一个很好的解决方案,也会很高兴听到)
答案 0 :(得分:-1)
所以我不确定你是否反对这种方法,但你可以做到:
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 DB程序。有些事情在数据库中做得更好,因为这是它的目的。