ja hallo erstmal,.. leider gelingt es mir noch nicht so ganz, das verhalten von AR in während unit-tests nachzuvollziehen. Derzeit habe ich das Problem, dass destroy auf ein Objekt angewandt, dieses einfriert aber nicht aus der Datenbank löscht.
Also: Ich habe einen kleinen Test: http://pastie.caboo.se/133335 Der Hintergrund ist schnell erklärt: Zwei Modelle (contacts und contact_combies) stehen in in einer habtm-Relation. Über einen setter im contact sollen attribute für das contact_combi gesetzt werden können (vgl. complex forms railscasts) Das contact-Modell sieht dann so aus: http://pastie.caboo.se/133336 Das ContactCombi-Modell so: http://pastie.caboo.se/133337 Dabei habe ich beobachtet: - In der Anwendung funktioniert der Code einwandfrei - Der Test bricht mit der assertion in Zeile 20 ab, da zwei statt (wie erwartet ein) Objekt existieren - Es wird auf jeden Fall versucht das Objekt zu löschen, da das before_destroy Callback der ContactCombi aufgerufen wird, d.h. die Meldung (vgl. Zeile 8 - ContactCombi Modell) erscheint. - Es wird keine delete-Anweisung auf der Datenbank Ausgeführt (vgl. Log) - Richtig absurd wird's jedoch wenn die Safe-Anweisung wiederholt wird, d.h. Zeile 19 (unit-Test) ausgeführt wird. In diesem Fall erscheint die Fehlermeldung: test_save_delete_multiple_contact_combies(ContactTest): TypeError: can't modify frozen hash /var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/base.rb:1978:in `[]=' /var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/base.rb:1978:in `write_attribute' /var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/attribute_methods.rb:67:in `attribute=' /var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/base.rb:1858:in `__send__' /var/lib/gems/1.8/gems/activerecord-1.15.6/lib/active_record/base.rb:1858:in `method_missing' /home/jan/aptana-workspace-svn/contacts/app/helpers/save_mixin_helper.rb:3:in `before_create' ... D.h. destroy wird korrekt auf dem ContactCombi Objekt aufgerufen und der Hash wird - wie dokumentiert - eingefrohren. Warum erscheinen aber die Änderungen nicht in der Datenbank? Kann dies am ActiveRecord-Cache liegen? - Wie erreiche ich, dass die delete Anweisung auf der Datenbank ausgeführt wird? Danke, Guten rutsch, Jan _______________________________________________ rubyonrails-ug mailing list [email protected] http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug
