2013-07-17 65 views
0

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

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

从API响应中,我得到了相关user_idsfruit_names数组。例如:ids = [1,2,3,4]fruit_names = ["a","b","c","d"],其中fruit_name列存在于我的用户表中。如何在我的用户表中更新来自API响应相关idsfruit_name

+1

你必须给你正在尝试做的更多详细信息。我们不知道你的数据库是什么样的。另外,请向我们展示您尝试过的方式以及准确卡住的位置。 – Mischa

+0

那么这个API调用究竟是如何工作的?你知道'['Apple','Orange','Mango']'是如何与'[1,2,3,4]'相关的吗?如果你不能在你的问题中说清楚,就不能回答。 – Mischa

+0

我已经更新了我的问题。请看看它。 – Mano

回答

1

可以结合使用与为update此:

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阵列非常大,这将不会表现良好。

+0

谢谢你的回答。我可以在单个查询中更新这个吗? – Mano

+0

@Mano在一个查询中可能没有办法解决这个问题。更新的格式将始终为'UPDATE users SET fruit_name ='Apple'WHERE id = 1',因此无法在一个查询中更新具有不同值的多行。 – Mischa

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 
+0

Thanks.Can我可以在单个查询中进行更新吗? – Mano

+0

@mano,ASIK No .. :) – Santhosh