2013-07-17 64 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