如何更新收集ID的收集数据?

时间:2013-07-17 07:13:33

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在[1,2,3,4]收集ids params,我调用了一个API,该API将返回相应ID的数组。例如。 ["Apple","Orange","Mango"]。如何在我的数据库中更新相应的ID?

例如:上面提到的ids来自我的用户表。 ids = [1,2,3,4],这是我的用户表中的主键。

在API响应中,我为相关fruit_names获得了user_ids数组。例如:ids = [1,2,3,4]fruit_names = ["a","b","c","d"],我的用户表中存在fruit_name列。如何更新我的用户表中与fruit_name相关的API响应中的ids

2 个答案:

答案 0 :(得分:1)

您可以将each_with_indexupdate结合使用:

ids.each_with_index do |id, index|
  User.update(id, :fruit_name, fruit_names[index])
end

上面的代码假定:

ids = [1,2,3,4]
fruit_names = ["a","b","c","d"]

并且这些数组的索引匹配。

请注意,这将对ids数组中的每个项执行查询。如果您的ids数组非常大,则效果不佳。

答案 1 :(得分:1)

Hash[ids.zip fruit_names].each do |id, fruit|
  User.update_all({:fruit_name => fruit}, {:id => id})
end

OR

User.where(:id => ids).each do |usr|
 usr.update_attribute(:fruit_name, fruit_names[ids.index(usr.id)])
end