Rails 3.如何对所有记录执行保存操作?

时间:2012-01-19 14:36:23

标签: ruby-on-rails ruby activerecord

我有一个名为货运的模型。我在发货表中添加了一些列,并且有些列应该在保存之前计算。所以现在我必须编辑每个记录并点击更新,以便新列计算和添加数据。

那么有没有办法对所有货件记录执行全局保存,以便可以添加数据?

before_save :default_values
  def default_values
    self.volume = 1 unless self.volume
    self.kilograms = 1 unless self.kilograms
    self.status = "Open" if self.status.blank?
      if self.mode == "Air"
        self.estimated_transit_time = self.etd_origin + 7.days
        self.eta_place_of_delivery = self.etd_origin + 7.days
      else
        self.estimated_transit_time = self.etd_origin + (Place.find_by_city(self.place_of_loading).transit_time).days
        self.eta_place_of_delivery = self.etd_origin + (self.estimated_transit_time).days
      end
  end

3 个答案:

答案 0 :(得分:42)

一个班轮:

Shipment.find_each(&:save)

答案 1 :(得分:15)

批量加载数据。 从不一次加载所有

Shipment.find_each(:batch_size => 1000) do |shipment|
  shipment.save!
end

然后,当你必须在迁移之后计算一些字段或其他东西。只需将此作业添加到您的迁移中

答案 2 :(得分:1)

你可以制作这样的方法:

def self.save_all
    Shipment.all.each { |shipment| shipment.save! }
end

然后打电话:

Shipment.save_all