Ответ 1
Вы можете сделать такой метод:
def self.save_all
Shipment.all.each { |shipment| shipment.save! }
end
Затем просто позвоните:
Shipment.save_all
У меня есть модель, называемая отправкой. Я добавил несколько столбцов в таблицу отправлений, и есть несколько столбцов, которые должны быть рассчитаны до сохранения. Поэтому теперь мне нужно отредактировать каждую запись и нажать обновление, чтобы новые столбцы могли вычислять и добавлять данные.
Итак, есть способ выполнить глобальную экономию на всех отгрузках, чтобы данные могли быть добавлены?
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
Вы можете сделать такой метод:
def self.save_all
Shipment.all.each { |shipment| shipment.save! }
end
Затем просто позвоните:
Shipment.save_all
Один вкладыш:
Shipment.find_each(&:save)
Загрузите данные по пакету. Никогда загружать все одновременно
Shipment.find_each(:batch_size => 1000) do |shipment|
shipment.save!
end
Затем, когда вам нужно вычислить некоторые поля после миграции или что-то еще. Просто добавьте это задание в свою миграцию.