1

次のモデルの関連付けがあります。

コンサートにはhas_one location。場所は多態的な関連付けです (コンサートだけがロケータブルではありません)。場所は、ジオコーダ gemによって address 属性を介してジオコーディングされます。

目標は、将来開催される特定の都市の近くのコンサートを見つけることです。ジオコーダー gem は.near(address_string)住所でレコードを検索する方法を提供しますが、その方法はコンサート クラスではなく、場所クラスにのみ適用できます。

次の回避策を考え出しました。

Location.near("Berlin").where(locatable_type: 'Concert').map(&:locatable)

これを分解してみましょう:

Location.near("Berlin")
# ==> returns locations of any kind near Berlin

.where(locatable_type: 'Concert')
# ==> returns concert locations near Berlin

.map(&:locatable)
# ==> returns an array of concerts near Berlin

問題は、これがコンサートの配列を返すことですが、upcomingコンサート スコープを使用して、将来行われるコンサートのみを検索できるように、リレーションを希望します。

それを行う方法についてのアイデアはありますか?

4

1 に答える 1

1

これを行うことができますActiveRecord::Relation

locatable_ids = Location.near('Berlin').where(locatable_type: 'Concert').map(&:locatable_id)
@concerts = Concert.where(id: locatable_ids).upcoming
于 2013-10-15T10:44:27.523 に答える