迭代2个数组以更新Rails数据库表

问题描述 投票:0回答:2

红宝石

我想使用存储在2个数组中的信息来更新数据库中的表水果

fruit_id=[2,8,14,35]
fruit_name=["apple","orange","banana","melon"]

例如:Fruit.id 2将Fruit.name用作“苹果”

我想到了for循环:

for i in fruit_id do
Fruit.find(i).update(name:fruit_name)
end

但是在我脑海中这才有意义。我也很抱歉,如果这个问题已经回答,我是新来的,不知道确切的名词来搜索...。非常感谢!

arrays ruby-on-rails ruby database for-loop
2个回答
0
投票

尝试这样的事情

fruit_id.zip(fruit_name).each do |id, name|
  fruit = Fruit.find_by(id: id)
  fruit.update_attribute(:name, name) if fruit
end

0
投票

这里有一些提示,我可以建议:

  1. 使用Array#zip
  2. 为了减少查询数量,您可以将ActiveRecord::Relation#whereActiveRecord::Relation#update_all结合使用

因此结果代码将是

fruit_ids = [2, 8, 14, 35]
fruit_names = ['apple', 'orange', 'banana', 'melon']
fruits = fruit_ids.zip(fruit_names) # => [[2, 'apple'], [8, 'orange'], [14, 'banana'], [35, 'mellon']]

fruits.each do |(id, name)|
  Fruit.where(id: id).update_all(name: name)
end

警告:update_all不是触发验证,因此,如果您有这种情况,最好将初始方法与Fruit.find(id).update(name: name)一起使用>

© www.soinside.com 2019 - 2024. All rights reserved.