我有一个项目,用户可以在指定的位置距离内搜索结果,例如距离邮政编码10英里。我正在使用geokit-rails,它使用简单的方法很好:
.within(@distance, :origin => @latlng)
然而,有一些结果不依赖于位置,所以我希望它们总是出现在搜索中,如果应该包含它,将通过名为'remote'的位属性设置为1来表示。
所以我需要做的是能够搜索距离小于X或远程等于1的所有结果。
有没有办法做到这一点,还是我必须进行2次db调用并合并结果?
非常感谢
答案 0 :(得分:0)
距离属性已从lib中删除,但有一些关于如何再次包含的解决方法,已包含的可以使用属性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