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