Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 大规模更新Rails中的单个记录(PostgreSQL)_Ruby On Rails_Ruby_Postgresql_Activerecord - Fatal编程技术网

Ruby on rails 大规模更新Rails中的单个记录(PostgreSQL)

Ruby on rails 大规模更新Rails中的单个记录(PostgreSQL),ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,我偶然发现了一个更新一组记录的问题 在我的数据库里 id | name | info::hstore | friends[]::varchar 1 | Claire | {} | [] 2 | Mary | {} | [] 3 | Bob | {} | [] 例如,我有一个哈希数组: [ {id: 1, name: "Claire", info: {age: 21, sex: 'f'}, friends:

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

在我的数据库里

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']}
]
所有记录都已经在数据库中了,我只想用散列中的列来更新现有的记录,散列中所有的字段都有相同数量的字段要更新:name、info和friends

有一个gem活动记录导入,但它只执行插入操作。此外,update_all方法也不起作用,因为我有单独的数据根据id更新每个记录。 不想进行原始SQL插入,因为我的行具有Postgres hstore和数组类型,不想进行大量数据操作

大约有10000到100000条记录需要更新


Env:Postgres 9.4,Rails 3如果Rails 4中有一个好的解决方案,我会很高兴听到关于

的消息,因此我不确定您是否反对这种方法,从您目前所说的内容来看,但您可以:

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,您可以使用类似于联接的内容从另一个表进行批量更新。但是,如果您要遇到所有这些麻烦,那么您应该在DB控制台psql上或使用GUI DB程序来执行SQL查询。有些事情在数据库中做得更好,因为它就是这样设计的。

请给出一个更具体的例子,说明您想要更新什么以及数据如何存储在哈希中。您有{id:2,name:Claire},对于id:=2的记录,是否需要将record:name更新为'Claire'?还是只有那些拥有更多数据而不仅仅是姓名的人才需要更新?这些都在同一个表中吗?谢谢,我更新了一个问题。你试过任何类型的迭代器吗?哪个迭代器?我目前正在以用户身份获取所有对象。whereid:ids\u form\u列表并逐个更新您可以发布您拥有的代码吗?即使您不喜欢或不想使用该代码,人们也需要查看它以了解您不想做什么。您可以使用ruby生成一个.sql文件,您可以在命令行上针对DB运行该文件,但我不知道hstore的Postgres语法,所以您必须自己编写。所有这些都是从一个文本文件进入你的Rails应用程序的吗?那些投票反对答案超过一年的人,但却不能提供更好的答案。。。SMH。无用的