Рельсы оборачивают миграцию с транзакцией? - PullRequest
0 голосов
/ 12 марта 2020

Я создал миграцию в нашем приложении rails, как показано ниже.

class UpdateDefaultValues < ActiveRecord::Migration[5.2]
  def up
    OrderType.where(:category =>"reclamation").update_all(:prevent_delivery => false)
    InvoiceType.where(:category =>"reclamation").update_all(:send_automatically => true)
  end

  def down
    OrderType.where(:category =>"reclamation").update_all(:prevent_delivery => true)
    InvoiceType.where(:category =>"reclamation").update_all(:send_automatically => false)
  end
end

Но мне было интересно, выполняет ли rails up или down методы в sql транзакции автоматически , или мне нужно заключить два обновления в собственную транзакцию, чтобы убедиться, что миграция будет обновлять все или ничего?

1 Ответ

0 голосов
/ 12 марта 2020

Rails не помещает его в блок транзакций. Он просто выйдет, если что-то не получится. Если вы хотите, чтобы и то и другое происходило независимо от того, что, как вы сказали, вам придется поместить в блок ActiveRecord::Base.transaction. В вашем случае это должно быть что-то вроде ниже -

class UpdateDefaultValues < ActiveRecord::Migration[5.2]
  def up
    ActiveRecord::Base.transaction do
      OrderType.where(:category =>"reclamation").update_all(:prevent_delivery => false)
      InvoiceType.where(:category =>"reclamation").update_all(:send_automatically => true)
    end
  end

  def down
    ActiveRecord::Base.transaction do
      OrderType.where(:category =>"reclamation").update_all(:prevent_delivery => true)
      InvoiceType.where(:category =>"reclamation").update_all(:send_automatically => false)
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...