【问题标题】:undefined method 'merge_conditions' for geokit-railsgeokit-rails 的未定义方法“merge_conditions”
【发布时间】:2011-06-20 09:45:17
【问题描述】:

我正在使用 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,我已将 latlng 列迁移到 Company。我哪里错了?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 geolocation geokit


    【解决方案1】:

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

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

    merge_conditions 是 rails 2.3.8 中的 deprecatedActiveRecord::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。如果它仍在积极管理中,也许我会花时间找出更新此代码的“正确”方法。

    我们not the only ones 遇到了这个问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2013-02-05
      • 1970-01-01
      相关资源
      最近更新 更多