【问题标题】:Rails Geocoder "undefined method error"Rails Geocoder“未定义的方法错误”
【发布时间】:2011-10-23 09:09:09
【问题描述】:

这里又是一位真正的 Ruby 新手,所以请温柔一点…… 我正在使用 alexreisner 在 rails 3.0 上的地理编码器,并且无法从 Geocoder::Results 库中调用方法。我仔细研究了 Geocoder 文档,但我无法完成一件简单的事情:从用户提交的地址中提取“状态”结果。所以把“123 Fake Street, San Francisco, CA”改成“CA”或“California”。

(我的程序现在只使用“状态”信息来帮助确定结果,但我希望在以后改进应用程序时使用完整的地址信息,这就是为什么我要求完整地址。)

我已经通过从文档和我在这里找到的其他答案中收集到的最好的方法设置了我的模型,但是以前与此主题类似的答案对我没有帮助:

class Project < ActiveRecord::Base                    
  attr_accessible :title, :address, :latitude, :longitude     

  belongs_to :user 

  geocoded_by :address
  after_validation :fetch_coordinates

  reverse_geocoded_by :latitude, :longitude do |obj, geo| 
    obj.state = geo.state
    obj.country_code = geo.country_code
    obj.address = [geo.state, geo.country_code].join(",")
  end
  after_validation :reverse_geocode  

end

但这会为州、国家/地区代码和地址带来“未定义的错误方法”。我不明白,因为 Geocoder gem 的文档清楚地提供了这些方法。我的模型似乎根本无法访问它们。 (作为记录,我的模型能够从输入的地址中提取纬度和经度,因此看起来 Geocoder 配置正确。并且“geocoded_by”方法效果很好。此外,它已正确设置为 Google API)。

我很确定我在这里遗漏了一些简单的东西。在 Rails 控制台中,我什至可以使用 Geocoder.search("Miami, FL") 并提取所有县、州和城市信息,但我似乎无法通过我的模型提取“州”。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rubygems google-geocoder


    【解决方案1】:

    确保重新启动 rails 服务器。我遇到了地理编码在 Rails 控制台中运行良好但在我的应用程序中给了我一个undefined method 'geocoded_by' 的情况。似乎这不是您遇到相同错误的原因,但这是我的。

    【讨论】:

    • 这个答案帮助我解决了我的问题,因为我对代码进行了三次检查以确保它是正确的。谢谢。
    【解决方案2】:

    如果您查看 Geocoder 站点上的示例,您会发现生成给块的第二个值似乎是一个数组或某种其他形式的集合,因此您不能直接调用它的方法。相反,您首先必须从中拉出正确的对象:

    reverse_geocoded_by :lat, :lon do |obj,results|
      if geo = results.first
        obj.city    = geo.city
        obj.zipcode = geo.postal_code
        obj.country = geo.country_code
      end
    end
    

    【讨论】:

    • 使用该代码,我仍然收到“城市”“邮政编码”和“国家”的未定义方法错误消息。我还没有玩弄 Geocoder::Result 文档,所以我不知道为什么这些不起作用。
    • 刚刚得到它。我需要使用我的“项目”类而不是“obj”,并且真的不想使用反向地理编码。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多