Ruby on rails Rails ActiveRecord中的反向关联

Ruby on rails Rails ActiveRecord中的反向关联,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我有两个ActiveRecord型号想法和用户。两者之间有一种联系,就像User.idea 用户模型当前保存来自用户的lat和lng坐标 从ideas controller,我想查询与某个位置匹配的所有创意。我不知道如何在Rails中执行此反向连接查询 我想你必须在加载时搜索与你所在位置相匹配并包含创意的所有用户 # first about the near by: def close_to( position ) (position-0.2)..(position+0.2) end @u

我有两个ActiveRecord型号<代码>想法和
用户
。两者之间有一种联系,就像
User.idea

用户模型当前保存来自用户的
lat
lng
坐标


从ideas controller,我想查询与某个位置匹配的所有创意。我不知道如何在Rails中执行此反向连接查询

我想你必须在加载时搜索与你所在位置相匹配并包含创意的所有用户

# 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
否则,用户数组中将包含按用户排序的所有想法。还是我错过了你的问题?

我想你想要这个:

Idea.joins(:user).where(user: {lat: some_lat, lng: some_lng}).all

some_lat
/
some_lng
可以是一个范围。Rails将处理这个魔术。

首先:您如何找到想要的位置?也许你可以使用像Geocoder这样的东西(有一个)

现在,在不久的将来,我会遇到类似的问题,但目前我认为我可能会分两步(双重查询)来完成:

通过这种方式,您可以在想要的位置附近获得想法(我在这里使用了Geocoder方法,但您可以通过另一种方式获得用户)


注意:我假设一个用户有很多想法,并且一个想法属于一个用户

如果你有准确的纬度和经度,这可能是一个好的解决方案(尽管很少可能使用浮点/小数精确),他应该能够通过一个范围:
some_lat=56.311018..56.711018
。这些数据的生成可以通过一种方法完成,这超出了问题的范围<代码>某些纬度可以是一个范围。Rails将处理这个魔术。您可以告诉Rails使用
.includes(:ideas)
加载属于用户的想法。
@users = User.near(params[:location]).pluck(:id)
@ideas = Ideas.where(:user_id => @users)