我有一个项目,用户可以在距离他们所在位置指定距离内搜索结果,例如距离他们的邮政编码10英里内。我使用的是geokit轨道,使用简单的效果很好
.within(@distance, :origin => @latlng)
然而,有些结果并不取决于位置,所以我希望它们总是出现在搜索中,如果应该包括的话,这将由一个名为"remote"的位属性表示,该属性设置为1。
所以我需要做的是能够搜索距离小于X或remote等于1的所有结果。
有什么方法可以做到这一点吗?或者我必须调用2个数据库并合并结果吗?
非常感谢
distance属性已从库中删除,但关于如何再次包含,有一些变通方法,已经包含的属性可以添加属性remote的属性距离条件。
module Geokit::ActsAsMappable
module ClassMethods
# Overwrite Geokit `within`
def within(distance, options = {})
options[:within] = distance
# Have to copy the options because `build_distance_sql` will delete them.
conditions = distance_conditions(options.dup)
sql = build_distance_sql(options)
self.select(
"#{sql} AS #{self.distance_column_name}, #{table_name}.*"
).where(conditions)
end
# Overwrite Geokit `by_distance`
def by_distance(options = {})
sql = build_distance_sql(options)
self.select("#{sql} AS #{self.distance_column_name}, #{table_name}.*"
).order("#{self.distance_column_name} ASC")
end
private
# Copied from geokit-rails/lib/geokit-rails/acts_as_mappable.rb
# Extract distance_sql building to method `build_distance_sql`.
def build_distance_sql(options)
origin = extract_origin_from_options(options)
units = extract_units_from_options(options)
formula = extract_formula_from_options(options)
distance_sql(origin, units, formula)
end
end
end
https://github.com/geokit/geokit-rails/issues/56