Rails DISTINCT查询在进行迭代时不起作用

时间:2018-02-10 07:28:40

标签: mysql ruby-on-rails ruby sqlite

我想显示用户的上次访问位置。作为考虑因素,用户可以多次访问该位置,因此我只想在location_id上次运行活动时显示该位置。 我使用带有此代码的rails query

runnings = @current_user.
  runnings.
  where(with_friend: true).
  order('created_at DESC').
  distinct('location_id').
  select([:location_id, :created_at])

完美无缺。它没有两次显示相同的运行活动

#<Running id: nil, created_at: "2018-02-09 12:51:48", location_id: 10>

我也可以根据location_id获取位置

locations = Location.where('id in (:location_ids)', location_ids: runnings.map {|running| running.location_id})

顺便说一下,我有21个虚拟运行数据,位置只显示10个,这就是我的预期。 但是当我尝试使用此代码

从运行中获取created_at属性时
runnings.map {|running| running.created_at.to_i}

它再次显示21个数据,除非我将其更改为数组或json显示21个数据,否则我无法计算它。 我的代码出了什么问题?你能帮我解决一下吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

Distinct适用于所有选定的列,而不仅仅是您所期望的location_id。您可以使用group来解决问题:

runnings = @current_user.
  runnings.
  where(with_friend: true).
  select('MAX(created_at), location_id').
  group(:location_id, :created_at)