1

私は次の協会を持っています

class Location < ActiveRecord::Base
   has_many :items
end

class Item < ActiveRecord::Base
   belongs_to :location
end

Location のインスタンスがいくつかあるとします。これらの場所に属するすべてのアイテムをクエリする必要があります。現在、結果を配列として取得することができました

items =[]
Location.near(latitude,longitude,distance).find_each do |location|
      location.items.find_each do |item|
           items << item
      end
end 

ただし、結果を ActiveRecord::Relation として取得する方法はありますか。ActiveRecord::Relation で「where」を使用して結果をさらにクエリしたいからです。

PS 「near」メソッドはジオコーダ gem からのもので、ActiveRecord::Relation を返します。

- - - - - - - - - - -編集 - - - - - - - - - - - - - -

返信ありがとうございます ほぼ解決策が見つかりました

locations = Location.near(latitude,longitude,distance)
Item.where(location_id: locations.pluck(:id))

それは正しい方法ですか?私には少し直感的ではありません。

----------------------再編集 -------------------------- -

ちょっとしたコメント: DataMapper から切り替えているため、直感的ではないと言います。Datamapper の場合は、次のように非常に単純です。

Location.near(blabla).items

アソシエーションを介してクエリを作成するのは非常に簡単です。Datamapper と比較すると、なぜ ActiveRecord の関連付けが役に立たないのか理解できませんか?

4

1 に答える 1

3

マッピングで 1 つのクエリを使用するように編集...

ビリーが上で言ったことですが、より速いかもしれない別のオプション:

locations = Location.near(1, 2, 3)
items = Item.where(:location_id => locations.map(&:ids)
于 2013-07-31T18:16:32.467 に答える