【发布时间】:2011-05-30 16:28:05
【问题描述】:
我有以下模型:
class Location < ActiveRecord::Base
has_many :location_items
has_many :items, :through=>:location_items
end
class Item < ActiveRecord::Base
has_many :location_items
has_many :locations, :through=>:location_items
end
class LocationItem < ActiveRecord::Base
belongs_to :item
belongs_to :location
end
我还为项目模型启用了全文搜索(来自 gem),我可以这样做 Item.search('keyword') -- 'search' 是 gem 提供的范围,用于获取名称或描述匹配关键字的所有项目,结果项目添加了一个 'rank' 属性用于匹配的相关性
我还为位置模型启用了地理搜索(来自 gem),我可以 Location.near('Toronto.ON', 100) --- 'near' 是 gem 提供的范围,用于获取距离多伦多 100 公里内的所有位置,结果位置添加了一个距离给定距离的 'distance' 属性位置 - 本例中为多伦多
所以现在我要做的是获取 location_item 对象的列表,这些对象的位置与特定给定位置匹配,并且项目与给定关键字匹配。 例如,在多伦多 100 公里范围内搜索与“关键字”匹配的 location_item 对象。
如何使用 one 查询来实现这一点?并且还可以通过 location_item 对象中的关联项目和位置访问距离和排名属性。
我似乎无法链接范围,因为它们仅适用于 Item 和 Location,而不适用于 LocationItem,
例如,下面的表达式不起作用
LocationItem.joins(:items, locations).search('keyword').near('Toronto, ON', 100)
希望我对我正在尝试做的事情的描述是有意义的。你有什么主意吗?非常感谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord join model