我有以下模型关联:
音乐会has_one location。_ 位置是一个多态关联(音乐会不是唯一的可定位对象)。该位置由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
音乐会范围来仅查找未来发生的音乐会。
关于如何做到这一点的任何想法?