次のモデルの関連付けがあります。
コンサートには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
コンサート スコープを使用して、将来行われるコンサートのみを検索できるように、リレーションを希望します。
それを行う方法についてのアイデアはありますか?