我在玩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
,并且我已经将列lat
和lng
迁移到Company中。我哪里错了?
我自己刚刚偶然发现了这个东西。
这完全是一个1分钟的破解修复,但由于这是一个相对无害的方法插入,不会对其使用范围之外的内容产生太大影响,我只是直接将该方法添加到插件中。
merge_conditions是rails 2.3.8中不推荐使用的ActiveRecord::Base方法。
插入到app/vvendor/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分钟的破解修复,尤其是当破解包含在旧的外部库中时。。。
我想我会发现原始代码是否在其他地方调用merge_conditions。如果代码仍在积极管理中,也许我会花时间找出更新代码的"正确"方法。
我们不是唯一遇到这个问题的人。
我必须像第一条评论一样尝试myModel.geo_scope,bblzzz。。。