将数组映射到关系

时间:2013-10-15 10:39:50

标签: ruby-on-rails activerecord associations geocoding

我有以下模型关联:

音乐会 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音乐会范围来查找将来发生的音乐会

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以ActiveRecord::Relation执行此操作:

locatable_ids = Location.near('Berlin').where(locatable_type: 'Concert').map(&:locatable_id)
@concerts = Concert.where(id: locatable_ids).upcoming