使用Geokit-Rails,如何找到距离内的所有字段或将位值设置为1

时间:2015-04-10 15:31:33

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord geokit

我有一个项目,用户可以在指定的位置距离内搜索结果,例如距离邮政编码10英里。我正在使用geokit-rails,它使用简单的方法很好:

.within(@distance, :origin => @latlng)

然而,有一些结果不依赖于位置,所以我希望它们总是出现在搜索中,如果应该包含它,将通过名为'remote'的位属性设置为1来表示。

所以我需要做的是能够搜索距离小于X或远程等于1的所有结果。

有没有办法做到这一点,还是我必须进行2次db调用并合并结果?

非常感谢

1 个答案:

答案 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

https://github.com/geokit/geokit-rails/issues/56