使用rails控制台中的方法更新所有记录

时间:2013-08-27 01:15:15

标签: ruby-on-rails

我从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

1 个答案:

答案 0 :(得分:3)

update_all用于对记录执行数据库更新语句,因此您可以Location.update_all("SET postal_code=null")清除所有邮政编码字段。对于您的情况,听起来您只想在一批位置对象上运行您的方法。

怎么样:

Location.all.each do |loc|
  loc.geocode
end