DataMapper - Jak używać tranzakcji?

Szukam i szukam i znaleźć nie mogę. Jak w DataMaperze używać tranzakcji?

Fakt, że dokumentacja jest dość marna i przykładów mało. Na teraz najlepiej jest patrzyć do źródeł.

DataMapper::Transaction.new(Person).commit do |t| 
  Person.create(:name => "Foo", :city => "Bar")
  t.rollback
end

A po co podaje się metodzie new klasę?

Możesz tam podać tablicę obiektów, klas lub repozytoriów.
Wszystkie poniższe argumenty do new są prawidłowe

DataMapper::Transaction.new(DataMapper.repository(:default))
DataMapper::Transaction.new(@foo) # @foo jest instancją modelu 
DataMapper::Transaction.new(Person, Car)

Na podstawie modelu lub instancji wyciągane jest repozytorium a na następnie z niego odpowiedni adapter (pg. mysql, sqlite…)
Jeśli dobrze rozumiem, to różne modele mogą mieć różne adaptery i stąd wynika to całe zamieszanie.

A mam rozumieć, że jak się nie chcę używać przez blok, to można?

t = DataMapper::Transaction.new(Person) t.begin Person.create(:name => "Foo", :city => "Bar") t.commit

Można, ale akurat w tym przypadku nie widzię takiej potrzeby :slight_smile: