1

我有两个 ActiveRecord 模型。IdeaUser。两者之间存在一种关联,其工作方式类似于User.idea.

User 模型当前保存latlng来自用户的坐标。

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

4

3 回答 3

1

我猜你想要这个:

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

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

于 2012-04-25T18:52:18.483 回答
1

第一:你如何找到想要的位置?可能你可以使用 Geocoder 之类的东西(有一个RailsCast 关于它)。

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

@users = User.near(params[:location]).pluck(:id)
@ideas = Ideas.where(:user_id => @users)

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

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

于 2012-04-25T18:52:43.247 回答
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 数组中拥有用户排序的所有想法。还是我错过了你的问题?

于 2012-04-25T18:49:22.803 回答