Hallo zusammen! Habe eine Frage zu einem Magic Field: updated_at Es ist ja ganz toll, dass Rails sich hier um das Speichern des Datums bei Bearbeitung selbst kümmert. Aber kann man das in speziellen Fällen auch unterdrücken? Konkret geht es darum, dass ich mit AJAX-Klimbim eine Liste umsortiere, also nur die Spalte :positions ändere für alle Einträge. Dann haben plötzlich alle Einträge den gleichen updated_at-Zeitpunkt. Wenn ich nachträglich sowas versuche: eintrag.update_attribute(:updated_at,temp_date) wobei ich in temp_date das Datum vor Positionsänderung gespeichert habe, bringt das leider gar nichts. Ärgerlich. Hat jemand eine Idee? Klar, ich könnte auf die Magic-Funktion verzichten und alles manuell regeln. Aber gehts auch anders? Vielen Dank schonmal und Grüße, Thomas Voigt.
on 2009-04-19 23:35
on 2009-04-20 00:11
Als Workaround habe ich erstmal das hier gemacht: temp_date = eintrag.updated_at eintrag.save sql = ActiveRecord::Base.connection(); sql.begin_db_transaction sql.update "UPDATE `eintraege` SET `updated_at` = '"+temp_date.to_s(:db)+"' WHERE `id` = "+eintrag.id.to_s sql.commit_db_transaction Also: ActiveRecord umgehen. Vielleicht hat ja jemand einen Tipp, wie's schöner geht. Grüße, Thomas. Thomas Voigt schrieb:
on 2009-04-20 00:27
On Monday 20 April 2009, Thomas Voigt wrote: > Also: ActiveRecord umgehen. > > Vielleicht hat ja jemand einen Tipp, wie's schöner geht. Du könntest auf den betroffenen Objekten obj.send(:changed_attributes).clear aufrufen. Das sieht nur schöner aus, greift aber tief in die Implementierung rein. Schau selbst in ActiveRecord::TimeStamp und ActiveRecord::Dirty. Michael -- Michael Schuerig mailto:michael@schuerig.de http://www.schuerig.de/michael/
on 2009-04-20 00:34
probier das hier mal aus:
class Foo < ActiveRecord::Base
self.record_timestamps = false
end
du müsstest mal schauen, dass du das halt nur in der methode setzt,
die deine sortierung macht und nicht überall...
gerade wenn es nur ne kleine methode ist und danach sonst nix mehr mit
dem model gemacht wird, sollte das ziemlich einfach gehen...
in etwa so:
class Foo < ActiveRecord::Base
def update_position(position)
self.record_timestamps = false
update_attribute(:position, position)
end
end
gruß
manuel
Am 20.04.2009 um 00:25 schrieb Michael Schuerig:
on 2009-04-20 00:44
On Monday 20 April 2009, Manuel Wiedenmann wrote: > class Foo < ActiveRecord::Base > self.record_timestamps = false > end > > du müsstest mal schauen, dass du das halt nur in der methode setzt, > die deine sortierung macht und nicht überall... Der Nachteil daran ist, dass man damit garantiert Code bekommt, der nicht Thread-sicher ist, sofern man nicht gerade ein riesiges Lock irgendwo darum herum baut. Michael -- Michael Schuerig mailto:michael@schuerig.de http://www.schuerig.de/michael/
on 2009-04-20 08:41
Das hier schon gesehen: http://blog.evanweaver.com/articles/2006/12/26/hac... ? def do_sth_without_ts class << self def record_timestamps; false; end end do_sth... class << self remove_method :record_timestamps end end Kommt mir allerdings ziemlich hackig vor… Niko.
on 2009-04-21 13:09
Danke für Eure Ideen! Irgendwie lass ich's wohl erstmal beim Zwischenspeichern und nachträglichen überschreiben per SQL. Datenbankunabhängigkeit brauche ich bei dem Projekt ohnehin nicht. Und irgendwie scheint es mir auch so, dass es bei den Magic-Funktionen einfach nicht vorgesehen ist, dass man da was dran rumdrehen kann. So sehr ich Rails liebe, es ist dann doch oft so: Wenn man tief geht, hat man fast mehr Arbeit, als wenn man von vorneherein alles selbst gemacht hätte. - Aber klar, das fällt kaum ins Gewicht, wenn man die Vorteile betrachtet. Also, Danke nochmal und Grüße, Thomas. Niko Dittmann schrieb:
on 2009-04-21 14:15
Am 21. April 2009 13:08 schrieb Thomas Voigt <toshybear@gmx.net>: > > So sehr ich Rails liebe, es ist dann doch oft so: Wenn man tief geht, hat > man fast mehr Arbeit, als wenn man von vorneherein alles selbst gemacht > hätte. - Aber klar, das fällt kaum ins Gewicht, wenn man die Vorteile > betrachtet. > Herzlichen Glückwunsch. Du hast das Prinzip von "Opinionated Software" verstanden. :-) Viele Grüße Nicolai
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.