неопределенный метод 'merge_conditions' для geokit-rails - PullRequest
2 голосов
/ 20 июня 2011

Я играю с Geokit-Rails (https://github.com/andre/geokit-rails), и мне нужно найти все записи в пределах 10 миль от источника. Вот моя ошибка:

Company.find(:all, :origin=>'New York, NY', :within=>10)
NoMethodError: undefined method `merge_conditions' for #<Class:0x0000010832f740>
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/base.rb:1016:in 'method_missing'
from /Users/san/Documents/sanj/app/vendor/plugins/geokit-rails/lib/geokit-rails/acts_as_mappable.rb:349:in `apply_bounds_conditions'
from /Users/san/Documents/sanj/app/vendor/plugins/geokit-rails/lib/geokit-rails/acts_as_mappable.rb:260:in `prepare_for_find_or_count'
from /Users/san/Documents/sanj/app/vendor/plugins/geokit-rails/lib/geokit-rails/acts_as_mappable.rb:152:in `find'
from (irb):4
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:44:in `start'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:8:in `start'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

У меня есть acts_as_mappable в Company.rb, и я перенес столбцы lat и lng в Company. Куда я иду не так?

1 Ответ

5 голосов
/ 25 июня 2011

Я только что наткнулся на эту самую вещь.

Это всего лишь 1-минутное хакерское исправление, но, поскольку это относительно безвредная вставка метода, которая не сильно повлияет за пределы его использования, я просто добавил метод прямо в плагин.

merge_conditions является устаревшим ActiveRecord :: Base методом из рельсов 2.3.8.

вставлено в app / vendor / plugins / geokit-rails / lib / geokit-rails / acts_as_mappable.rb

  private
    def merge_conditions(*conditions)
    segments = []

    conditions.each do |condition|
      unless condition.blank?
        sql = sanitize_sql(condition)
        segments << sql unless sql.blank?
      end
    end

    "(#{segments.join(') AND (')})" unless segments.empty?
    end

Я не совсем уверен, что заменило этот вид цепочки условий SQL вручную (может быть: области действия), поэтому код геокита немного стар, но иногда 1-минутное исправление взлома - это все, что вам нужно, особенно когда взлом содержится в более старой внешней библиотеке ...

Полагаю, я выясню, вызывает ли оригинальный код merge_conditions где-нибудь еще, кроме этого. Может быть, я найду время, чтобы выяснить «правильный» способ обновления этого кода, если он все еще активно управляется.

Мы не единственные , испытывающие эту проблему.

Должен попробовать myModel.geo_scope как первый комментарий, bblzzz ...

...