Geocoder : ArgumentError: wrong number of arguments (3 for 0..1)

Geocoder : ArgumentError: wrong number of arguments (3 for 0..1)

我读了很多关于这个问题的文章,但我没有找到解决问题的方法。 我创建了一个 rake 任务,可以在我的数据库中找到所有学校,并找到所有高级学校。感谢 Geocoder,我想显示非高级学校中最近的 3 所高级学校。但是当我启动我的任务时,出现了这个错误:

rake aborted!
ArgumentError: wrong number of arguments (3 for 0..1)
/Users/marchardantonin/.rvm/gems/ruby-2.0.0-p648/gems/origin-2.1.1/lib/origin/selectable.rb:334:in `near'
/Users/marchardantonin/Sites/Vroom2017/vroomvroom-web/lib/tasks/geocodeschool.rake:8:in `block (3 levels) in <top (required)>'
/Users/marchardantonin/.rvm/gems/ruby-2.0.0-p648/gems/mongoid-5.0.0/lib/mongoid/contextual/mongo.rb:668:in `yield_document'

这是代码:

geocoderschool.rake

namespace :geocodeschool do
  desc "Show premium school near non-premium school and update them"
  task :schgc => :environment do
      @schools = School.all
      @schools_premium = @schools.premium_school
      radius = 30
      @schools.each do |school|
        @schools_aside = @schools_premium.near(school.coordinates.reverse, radius, units: :km).limit(3)
        puts "les auto-écoles premiums : #{@shcools_aside.count}"
        puts "-------"
        @schools_aside.each do |sa|
          puts sa.title
        end
        puts "-------"
    end
  end
end

school.rb

  scope :premium_school, -> {where(:subscription.exists => true).where("subscription.current_period_end" => {'$gte' => Date.today})}

  embeds_one :geocodeschool
  accepts_nested_attributes_for :geocodeschool

地理编码school.rb

class Geocodeschool
  include Mongoid::Document

  embedded_in :school

  field :school_premium_aside, type: Array

end

有人可以向我解释错误并帮助我找到问题吗?

谢谢!

您可能应该看一下official documentations gem。它只接受一个散列作为参数,例如:

@schools_premium.near(location: [ 23.1, 12.1 ])

查看 Mongoid code,您似乎应该这样使用 geo_near

@schools_premium.geo_near(school.coordinates.reverse).max_distance(0.5)

应在模型上调用 Geocode 的 near 方法,发送坐标。

所以,在PremiumSchool模型上调用它,并将坐标发送到@schools_premium

@schools_aside = School.near(@schools_premium.coordinates.reverse, radius, units: :km).limit(3)

Here is the documentation.