是这样的,我想更新数据库中的数据。 假设有这样一个查询出来的对象
@dbdata = tabel.where(:data_type => @type)
还有一个 List
AA = [[1,2,3,4,5],[a,b,c,d,e],[q,w,e,r,y],[z,x,c,v,b],[9,8,7,6,5]]
有没有办法可以批量更新。或者重新组织一下数据批量更新到 DB
可以了解一下update all
AA 是想插入的值/?
是的,A 字段插入的值 [1,a,q,z,9],B 字段的值 [2,b,w,x,8],依次类推
而且查询出来的数据也一定是五条
感觉 update_all 只能更新一种值,而不能动态的更新每一条数据的值
那就跑五句 sql 呗
values = [[1,2,3,4,5],[9,8,7,6,5]] attributes = [:attr_1, :attr_2, :attr_3, :attr_4, :attr_5] pairs = values.map { |v| attributes.zip(v).to_h } tabel.where(:data_type => @type).each {|rcd| rcd.update_attributes(pairs.shift)}
没有测试过
可以使用 bulk_insert 这个 gem
假如你要更新的字段名依次是 %i(c1 c2 c3 c4 c5)
%i(c1 c2 c3 c4 c5)
AA.transpose.map { |date| %i(c1 c2 c3 c4 c5).zip(date).to_h} # [ # {:c1=>1, :c2=>:a, :c3=>:q, :c4=>:z, :c5=>9}, # {:c1=>2, :c2=>:b, :c3=>:w, :c4=>:x, :c5=>8}, # {:c1=>3, :c2=>:c, :c3=>:e, :c4=>:c, :c5=>7}, # {:c1=>4, :c2=>:d, :c3=>:r, :c4=>:v, :c5=>6}, # {:c1=>5, :c2=>:e, :c3=>:y, :c4=>:b, :c5=>5} # ]
剩下的想用什么姿势来更新数据就看你心情了,反正也就一行代码
可以使用 activerecord-import