Rails ActiveRecord中的反向关联

时间:2012-04-25 18:42:37

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我有两个ActiveRecord模型。 IdeaUser。这两者之间存在关联,就像User.idea一样。

用户模型目前保存用户的latlng坐标。

从想法控制器,我想查询匹配某个位置的所有想法。我不是如何在Rails中执行此反向连接查询。

3 个答案:

答案 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数组中有用户排序的所有想法。或者我错过了你的问题?