我有两个 ActiveRecord 模型。Idea
和User
。两者之间存在一种关联,其工作方式类似于User.idea
.
User 模型当前保存lat
并lng
来自用户的坐标。
从想法控制器,我想查询与某个位置匹配的所有想法。我不是如何在 Rails 中执行此反向连接查询。
我有两个 ActiveRecord 模型。Idea
和User
。两者之间存在一种关联,其工作方式类似于User.idea
.
User 模型当前保存lat
并lng
来自用户的坐标。
从想法控制器,我想查询与某个位置匹配的所有想法。我不是如何在 Rails 中执行此反向连接查询。
我猜你想要这个:
Idea.joins(:user).where(user: {lat: some_lat, lng: some_lng}).all
some_lat
/some_lng
可以是一个范围。Rails 将处理魔法。
第一:你如何找到想要的位置?可能你可以使用 Geocoder 之类的东西(有一个RailsCast 关于它)。
现在我在不久的将来会遇到类似的问题,但目前我认为我可能会分两步完成(双重查询):
@users = User.near(params[:location]).pluck(:id)
@ideas = Ideas.where(:user_id => @users)
通过这种方式,您可以在想要的位置附近获得想法(我在这里使用了 Geocoder 方法,但您可以以不同的方式获得用户)。
注意:我假设一个用户有很多想法并且一个想法属于一个用户
我想您必须搜索与您的位置匹配的所有用户,并在加载时包含这些想法。
# first about the near by:
def close_to( position )
(position-0.2)..(position+0.2)
end
@users = User.where( :lat => close_to(some_lat), :lng => close_to(some_lng) ).includes( :ideas )
# if you need all the ideas:
@ideas = []
@users.each do |user|
@ideas += user.ideas
end
否则,您在 users 数组中拥有用户排序的所有想法。还是我错过了你的问题?