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>'

私はacts_as_mappableCompany.rb にあり、列を Company に移行しlatましlngた。どこが間違っていますか?

4

1 に答える 1

5

私はまさにこれに出くわしました。

これは完全に 1 分間のハック修正ですが、使用範囲外にはあまり影響しない比較的無害なメソッド挿入であるため、メソッドをプラグインに直接追加しました。

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?) が何が置き換えられたのか正確にはわかりません。そのため、ジオキット コードは少し古いですが、特にハックが内部に含まれている場合は、1 分間のハック修正で十分な場合があります。古い外部ライブラリ...

元のコードが他の場所で merge_conditions を呼び出しているかどうかがわかると思います。このコードがまだアクティブに管理されている場合は、このコードを更新する「適切な」方法を見つけるのに時間がかかるかもしれません。

この問題を経験しているのは私たちだけではありません。

最初のコメント bblzzzz のように myModel.geo_scope を試す必要があります...

于 2011-06-24T22:24:06.253 に答える