повторить 2 массива для обновления таблицы базы данных рельсов - PullRequest
0 голосов
/ 27 апреля 2020

ruby на рельсах

я хочу обновить таблицу Fruit в моей базе данных, используя информацию, хранящуюся в 2 массивах:

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

, например, так : Fruit.id 2 будет иметь Fruit.name , чтобы быть "яблоком"

я думал, что для l oop:

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

но это имело смысл только в моей голове .... я также извиняюсь, если на этот вопрос уже был дан ответ, я новичок в этом и не знаю точный термин для поиска .... спасибо большое!

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Попробуйте что-то вроде этого

fruit_id.zip(fruit_name).each do |id, name|
  fruit = Fruit.find_by(id: id)
  fruit.update_attribute(:name, name) if fruit
end
0 голосов
/ 27 апреля 2020

Вот несколько советов, которые я могу предложить:

  1. Использовать Array # zip
  2. Чтобы уменьшить количество запросов, вы можете использовать ActiveRecord :: Relation #, где с ActiveRecord :: 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...