1

私は、ユーザーが自分の場所から指定された距離内 (たとえば、郵便番号から 10 マイル以内) で結果を検索できるプロジェクトを持っています。これには geokit-rails を使用していますが、シンプルなものを使用するとうまく機能します。

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

ただし、場所に依存しない結果がいくつかあるため、常に検索に表示されるようにしたいと思います。これは、含める必要がある場合は「リモート」と呼ばれるビット プロパティを 1 に設定することで示されます。

だから私がする必要があるのは、距離が X より小さい OR リモートが 1 に等しいすべての結果を検索できるようにすることです。

これを行う方法はありますか、または 2 つの db 呼び出しを行って結果をマージする必要がありますか?

どうもありがとう

4

1 に答える 1

0

distance 属性は lib から削除されましたが、再度含める方法についていくつかの回避策があります。既に含まれていると、属性 remote を使用して属性 distance の条件を追加できます。

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

于 2015-04-22T22:03:26.530 に答える