关于地理编码宝石的问题

时间:2011-06-07 16:34:03

标签: ruby-on-rails

我正在使用gem'地理编码器'。 我正在尝试创建一个从ip地址获取经度和纬度的对象。

这就是我的对象模型的样子:

class Hey < ActiveRecord::Base

  geocoded_by :ip
  after_validation :geocode

  def ip
    return request.ip
  end

end

当我创建一个对象时,我收到了这个错误:

NoMethodError (undefined method `request'for #<Hey:0x7f268f47dd00>):

如果我将方法ip更改为:

  def ip
    return "24.193.83.1"
  end

它有效。为什么request.ip在模型中不起作用? request.ip在控制器中为我工作。

我该如何解决这个问题?

谢谢,

乌迪德

2 个答案:

答案 0 :(得分:3)

这就是我解决它的方式。

模特:

class Hey < ActiveRecord::Base

      attr_accessor :ip_address

      geocoded_by :ip_address
      after_validation :geocode

    end

控制器:

class HeysController < ApplicationController

 def create
        hey = Hey.new
        hey.ip_address = request.ip
        hey.save

        redirect_to :action => "index"
      end

 end

答案 1 :(得分:2)

您还需要存储此对象的ip。在创建新对象时,使用request.ip填充ip_address。比模型中的代码看起来像:

geocoded_by :ip_address,
  :latitude => :lat, :longitude => :lon #this is also fields in the db
after_validation :geocode

或类似的东西。