我的rails应用程序中有一个位置表,它有四列: -
| Id |经度|纬度| USER_ID
现在我有一个包含user_ids列表的数组。如何编写活动记录查询以选择每个用户ID的最后一行。例如,如果我的数组中有三个user_id [1,2,3] ,我希望查询只返回与每个user_id相对应的最后一行(假设每个user_id的条目都存在于表格中的表格。
所以,到目前为止,我可以使用以下查询获取与所有user_id相对应的所有行:
@ids = [1,2,3]
@locations = Location.where(user_id: ids)
如何修改此activerecord查询,使其仅返回与每个user_id对应的最后一行
答案 0 :(得分: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 }
将最后关联的位置映射到数组答案 1 :(得分: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"]]