【发布时间】:2014-03-28 06:25:38
【问题描述】:
我的代码目前正在运行,以便地理编码器获取用户的 IP 地址并保存物理地址(以及用于开发的硬编码 IP 地址):
class User < ActiveRecord::Base
geocoded_by :ip_address
after_validation :geocode
reverse_geocoded_by :latitude, :longitude
after_validation :reverse_geocode
def self.remote_ip
if $request.remote_ip == '127.0.0.1'
'111.11.333.666'
else
$request.remote_ip
end
end
user.ip_address = remote_ip
user.location = user.address
现在我正在尝试从地址获取城市。查看文档,它提供了以下内容:
reverse_geocoded_by :latitude, :longitude do |obj,results|
if geo = results.first
obj.city = geo.city
obj.zipcode = geo.postal_code
obj.country = geo.country_code
end
end
after_validation :reverse_geocode
这一直给我一个“未定义的方法 `city=' for User:”错误。
查看之前在 stackoverflow 上提出的这个问题,Rails Geocoder "undefined method error" 和 Can Ruby Geocoder return just the street name on reverse_geocode calls?,它说我必须在上面的块中传递模型名称而不是“obj”。我怎么做?我尝试了用户,结果,但没有奏效。
【问题讨论】:
-
您的
User模型是否还有city字段? -
不,我是否需要将其添加为迁移,即 rails g migration AddCityToUsers city:string?我只希望 user.location 成为城市。
-
好的,好像可以了。
标签: ruby-on-rails model rails-geocoder