2

我正在玩 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>'

我在 Company.rb 中,并且acts_as_mappable已将列迁移到 Company。我哪里错了?latlng

4

1 回答 1

5

我自己偶然发现了这件事。

这完全是一个 1 分钟的 hack 修复,但由于它是一种相对无害的方法插入,不会在其使用范围之外产生太大影响,我只是将该方法直接添加到插件中。

merge_conditions 是rails 2.3.8 中已弃用的ActiveRecord::Base 方法。

插入 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 条件链接(可能是:scopes?),所以 geokit 代码有点旧,但有时你只需要 1 分钟的 hack 修复,尤其是当 hack 包含在其中时一个较旧的外部库...

我想我会找出原始代码是否在其他任何地方调用 merge_conditions 。如果仍在积极管理它,也许我会花时间找出更新此代码的“正确”方式。

我们不是唯一遇到这个问题的人。

必须像第一条评论一样尝试 myModel.geo_scope,bblzzz ......

于 2011-06-24T22:24:06.253 回答