我有一个名为货运的模型。我在发货表中添加了一些列,并且有些列应该在保存之前计算。所以现在我必须编辑每个记录并点击更新,以便新列计算和添加数据。
那么有没有办法对所有货件记录执行全局保存,以便可以添加数据?
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
答案 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