Question

I ont une action complexe à l'intérieur de contrôleur qui effectue plusieurs requêtes de mise à jour de la base de données.

Comment puis-je faire cette action agit comme transaction sans refactoring structurelle?

Était-ce utile?

La solution

MyModel.transaction do
  begin
    @model.update_stuff
    @sub_model.update_stuff
    @sub_sub_model.update_stuff
  rescue ActiveRecord::StatementInvalid # or whatever 
    # rollback is automatic, but if you want to do something additional, 
    # add it here
  end
end

Voici la documentation pour la méthode de transaction .

Autres conseils

Il est possible de faire toutes les actions dans des transactions du contrôleur à la fois avec:

around_filter :transactional

def transactional
  ActiveRecord::Base.transaction do
    yield
  end
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top