我正在使用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
在控制器中为我工作。
我该如何解决这个问题?
谢谢,
乌迪德
答案 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
或类似的东西。