Forum: Rails Germany Magic: update_at unterdrüc ken?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2d5c3cfe67c400588ba1e16d444159f7?d=identicon&s=25 Thomas Voigt (Guest)
on 2009-04-19 23:35
(Received via mailing list)
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.
2d5c3cfe67c400588ba1e16d444159f7?d=identicon&s=25 Thomas Voigt (Guest)
on 2009-04-20 00:11
(Received via mailing list)
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:
Bce1d1b7c3ec7b577dcb42e254899e6b?d=identicon&s=25 Michael Schuerig (Guest)
on 2009-04-20 00:27
(Received via mailing list)
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/
0719268936a0d71e8dcf7c21810510bf?d=identicon&s=25 Manuel Wiedenmann (Guest)
on 2009-04-20 00:34
(Received via mailing list)
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:
Bce1d1b7c3ec7b577dcb42e254899e6b?d=identicon&s=25 Michael Schuerig (Guest)
on 2009-04-20 00:44
(Received via mailing list)
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/
Ed52fe6b5cf49246210e767b7bc1c940?d=identicon&s=25 Niko Dittmann (Guest)
on 2009-04-20 08:41
(Received via mailing list)
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.
2d5c3cfe67c400588ba1e16d444159f7?d=identicon&s=25 Thomas Voigt (Guest)
on 2009-04-21 13:09
(Received via mailing list)
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:
59528506e6297141161afcde91d677c9?d=identicon&s=25 Nicolai Reuschling (codeblogger)
on 2009-04-21 14:15
(Received via mailing list)
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
This topic is locked and can not be replied to.