1

2 つの ActiveRecord モデルがあります。IdeaUser。のように機能する 2 つの関連付けがありUser.ideaます。

User モデルは現在保存され、ユーザーlatからlng調整されます。

アイデア コントローラーから、特定の場所に一致するすべてのアイデアをクエリしたいと思います。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があります)。

近い将来、同様の問題が発生する可能性がありますが、現時点では、おそらく2つのステップで実行すると思います(ダブルクエリ):

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

このようにして、目的の場所の近くでアイデアを取得します (ここではジオコーダーの方法を使用しましたが、別の方法でユーザーを取得することもできます)。

注: ユーザーには多くのアイデアがあり、アイデアはユーザーに属していると想定しています

于 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 に答える