Rails 3. Как выполнить действие сохранения для всех записей? - PullRequest
14 голосов
/ 19 января 2012

У меня есть модель под названием отгрузки.Я добавил несколько столбцов в таблицу отгрузок, и есть некоторые столбцы, которые должны быть рассчитаны до сохранения.Так что теперь мне нужно отредактировать каждую запись и нажать «обновить», чтобы новые столбцы вычислили и добавили данные.

Так есть ли способ выполнить глобальное сохранение всех записей отгрузки, чтобы можно было добавить данные?

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 ]

42 голосов
/ 01 октября 2013

Один лайнер:

Shipment.find_each(&:save)
15 голосов
/ 19 января 2012

Загрузка данных по партиям. Никогда загружать все сразу

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

Затем, когда вам нужно вычислить некоторые поля после миграции или что-то еще.Просто добавьте эту работу в свою миграцию .

2 голосов
/ 19 января 2012

Вы можете сделать метод, подобный этому:

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

Затем просто вызовите:

Shipment.save_all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...