我从CSV文件中导入了一堆位置,现在我需要对它们进行地理编码。当我手动创建新记录时,我会在验证后运行:geocode
。我希望能够立刻在所有记录上运行它。
我调查了update_all
,但未能让它发挥作用。有没有办法做到这一点?
这是我的模特:
class Location < ActiveRecord::Base
include Rails.application.routes.url_helpers
default_scope order('locations.name ASC')
acts_as_gmappable
attr_accessible :name,
:address,
:city,
:province,
:postal_code,
:country,
:phone,
:ext,
:phone_alt,
:ext_alt,
:url,
:latitude,
:longitude
geocoded_by :address
validates_presence_of :name
validates_presence_of :address
validates_presence_of :city
validates_presence_of :province
validates_presence_of :postal_code
validates_presence_of :country
after_validation :geocode
def gmaps4rails_address
"#{self.address} #{self.city} #{self.province} #{self.postal_code} #{self.country}"
end
end
答案 0 :(得分:3)
update_all用于对记录执行数据库更新语句,因此您可以Location.update_all("SET postal_code=null")
清除所有邮政编码字段。对于您的情况,听起来您只想在一批位置对象上运行您的方法。
怎么样:
Location.all.each do |loc|
loc.geocode
end