我有以下模型关联:
音乐会 has_one 位置。位置是多态关联(音乐会不是唯一的位置)。该位置通过geocoder gem的地址属性进行地理编码。
目标是在将来某个城市附近举办一场音乐会。虽然地理编码器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
音乐会范围来查找将来发生的音乐会
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
您可以ActiveRecord::Relation
执行此操作:
locatable_ids = Location.near('Berlin').where(locatable_type: 'Concert').map(&:locatable_id)
@concerts = Concert.where(id: locatable_ids).upcoming