2014-08-31 133 views
0

誰能幫助我在這個問題上,像我這樣的ActiveRecord的查詢

array = [[1, 'go'], [15, 'flat']........] 

二維數組,我有表名爲FeedPost數據庫,現在二維數組中的第一每個數組中的元素表示一列user_id,第二個表示列feed_type。現在我想從該表中獲得滿足該數組元素的所有記錄與這些確切的列完全匹配。換句話說,我想做類似的事情,

FeedPost.find_all_by_user_id_and_feed_type(array) 

但不幸的是它顯示下面的參數錯誤。

ArgumentError: wrong number of arguments (1 for 2) 

所以任何人都可以幫助我解決這個問題嗎?

回答

0

我認爲最好的解決辦法是:

FeedPost.where(user_id: array.map(&:first)).where(feed_type: array.map(&:last)) 

這將你的數組分成兩個數組,一個含有user_ids和包含一個feed_types,並使用IN SQL語句相應地查詢供稿文章。

編輯:這將帶來任何所有具有user_id和feed_type組合從數組中的所有記錄。如果您只想要只滿足數組中單個項目的user_id和feed_type的記錄,則這不起作用。

+0

with your syntax,you allow an record'{user_id:1 ,feed_type:'flat'}'匹配。不想要 – apneadiving 2014-08-31 17:39:35

+0

正確。我只是將其添加爲編輯。 – 2014-08-31 17:42:59

+0

嘗試你的查詢,你會得到零結果:它的'AND'鏈接 – apneadiving 2014-08-31 17:55:28

1

安裝any_ofgem,則:

queries = array.map {|sub_array| FeedPost.where({ user_id: sub_array[0], feed_type: sub_array[1] }) } 
FeedPost.where.any_of(*queries) 
+0

我得到這個錯誤ArgumentError:錯誤數量的參數(0代表1) – mithucste30 2014-08-31 17:45:59

+0

我需要更多的信息,不知道會發生什麼 – apneadiving 2014-08-31 17:56:15

+0

我希望你能理解我想要做的事,它是一個模型'def array_ [0] self.supports.each do | s | array << [s.leader_id,s.political_issue_id] end queries = array.map {| sub_array | FeedPost.where({user_id:sub_array [0],political_issue_id:sub_array [1]})} FeedPost.where.any_of(* queries) end' @apneadiving – mithucste30 2014-09-01 04:38:45