我有两个ActiveRecord模型。 Idea
和User
。这两者之间存在关联,就像User.idea
一样。
用户模型目前保存用户的lat
和lng
坐标。
从想法控制器,我想查询匹配某个位置的所有想法。我不是如何在Rails中执行此反向连接查询。
答案 0 :(得分:1)
我想你想要这个:
Idea.joins(:user).where(user: {lat: some_lat, lng: some_lng}).all
some_lat
/ some_lng
可以是范围。 Rails将处理魔术。
答案 1 :(得分:1)
首先:您如何找到想要的位置?可能你可以使用像Geocoder这样的东西(有一个RailsCast about it)。
现在我将在不久的将来遇到类似的问题,但目前我认为我可能会分两步完成(双重查询):
@users = User.near(params[:location]).pluck(:id)
@ideas = Ideas.where(:user_id => @users)
通过这种方式,您可以获得想要位置附近的想法(我在这里使用了Geocoder方法,但您可以以不同的方式获取用户)。
注意:我假设用户有很多想法,并且Idea属于用户
答案 2 :(得分:0)
我猜您必须搜索与您的位置匹配的所有用户,并在加载时包含这些想法。
# 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数组中有用户排序的所有想法。或者我错过了你的问题?