我想显示用户的上次访问位置。作为考虑因素,用户可以多次访问该位置,因此我只想在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个数据,否则我无法计算它。 我的代码出了什么问题?你能帮我解决一下吗?非常感谢你。
答案 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)