2015-12-07 30 views
1

我在Rails應用程序有一個位置表,有四列: -ActiveRecord的查詢與數組中的WHERE子句

| Id |經度|緯度| user_id

現在我有一個包含user_ids列表的數組。我如何編寫活動記錄查詢來選擇每個用戶標識的最後一行。例如,如果我的數組中有三個user_id [1,2,3]我希望查詢從表中返回對應於每個user_id的最後一行(讓我們假設每個user_id的條目存在於表中) 。

所以,到目前爲止,我能得到使用這個下面的查詢對應於所有user_ids所有行:

@ids = [1,2,3] 
@locations = Location.where(user_id: ids) 

我怎樣才能使其僅返回對應於每一個最後一行修改此的ActiveRecord查詢user_id說明

+0

可能的複製[ActiveRecord的 - 選擇從每個組的第一個記錄(HTTP://計算器。 com/questions/15206809/activerecord-select-first-record-from-each-group) –

回答

0

您也可以嘗試這樣的:

@ids = [1,2,3] 
@locations = @ids.map {|id| [Location.where(user_id: id).last.location,User.find(id).name]} 
#This would give you something like this: [["US",XYZ],["IND","ABC"]] 
+1

進行一點編輯,如** @ locations = @ ids.map {| id | Location.where(user_id:id).last} ** 使此解決方案有效。我想再問一個問題,我如何添加user_id對應的用戶名(用戶has_many位置關係在回覆中? –

+0

請檢查更新後的答案,讓我知道它是否工作正常 – sahil

1

假設你有一個有許多位置的User模型,你可以從用戶模式啓動和使用協會去爲每個用戶您的最後一個位置。

User.where(:id => @ids).includes(:locations).collect { |u| u.locations.last } 
  • User.where(:id => @ids)回報用戶對象的集合。
  • includes(:locations)渴望加載關聯的位置,所以我們不會遇到n+1問題。
  • collect { |u| u.locations.last }最後一個相關聯的位置映射到一個數組