Forum: Rails Germany Datumsfelder

Caca1c832afcdd867e03e3e67e881ebc?d=identicon&s=25 Raphael J. Schmid (Guest)
on 2009-03-16 02:49
(Received via mailing list)
Hallo Liste,

folgendes Problem: ich muss eine Datumseingabe verarbeiten. In der
Datenbank gibt es ein Feld vom Typ datetime. Wenn der Benutzer aber ein
nicht valides Datum einträgt, ist das text_field nach dem Absenden des
Formulars leer. Also habe ich mit attr_accessor ein virtuelles Feld
angelegt, in das der Benutzer anstelle des realen Feldes hineinschreibt.
Wenn er nun einen Fehler macht, steht seine fehlerhafte Eingabe nach dem
Absenden zwar wie gewünscht zur Korrektur wieder im text_field bereit,
aber selbiges ist natürlich nicht mehr durch fieldWithErrors als
fehlerhaft markiert. Um die Markierung wiederzubekommen, kopiere ich in
einer after_validation-Methode die errors des realen Feldes in das
virtuelle Feld, was ebenfalls wunderbar funktioniert.

Aber jetzt kommts:

Im View wird nun durch error_messages derselbe Fehler zweimal angezeigt,
einmal davon für ein Feld das der Benutzer gar nicht sieht. Und es gibt
laut http://api.rubyonrails.org/classes/ActiveRecord/Errors.html keine
Möglichkeit, aus den errors selektiv welche herauszulöschen.

Hattet Ihr das Problem schon mal? Gehe ich es vollkommen falsch an? Oder
bin ich auf dem richtigen Weg und habe es schon fast geschafft?

Dank & Gruß,

  Raphael
90103cb825e0aa8fb7d7b6657f761fc7?d=identicon&s=25 Guido Pesch (Guest)
on 2009-03-16 08:06
(Received via mailing list)
Hallo Raphael,

schau dir mal diesen Railscast an
http://railscasts.com/episodes/32-time-in-text-field

Guido

Zitat von "Raphael J. Schmid" <raphael.schmid@gmail.com>:
A4852818d512c2ed472bdb0ec3e21102?d=identicon&s=25 Urban Hafner (Guest)
on 2009-03-16 13:47
(Received via mailing list)
Raphael J. Schmid wrote:
> fehlerhaft markiert. Um die Markierung wiederzubekommen, kopiere ich in
> einer after_validation-Methode die errors des realen Feldes in das
> virtuelle Feld, was ebenfalls wunderbar funktioniert.


Wieso benutzt du eigentlich einen anderen Namen fuer dein Attribut?
Ueberschreibe doch einfach die setter und getter methoden und speichere
den Originalwert irgendwo ab. Dann mit read_attribute und
write_attribute einfach den Wert schreiben. Da sollten dann eigentlich
auch die validations laufen. Hoffe ich zumindest ;)

Urban
Caca1c832afcdd867e03e3e67e881ebc?d=identicon&s=25 Raphael J. Schmid (Guest)
on 2009-03-17 05:54
(Received via mailing list)
Hallo Guido,

> schau dir mal diesen Railscast an
> http://railscasts.com/episodes/32-time-in-text-field

danke für die URL! Leider geht der Screencast genau bis zu der von mir
beschriebenen Stelle. Des Problemes mit dem nicht als fehlerhaft
markierten text_field nimmt sich der Autor nicht an.

Es ist allerdings gar nicht so schwer, habe letzte Nacht noch eine
Lösung gefunden: man kann einfach ActiveRecord::Errors um eine
delete-Methode monkey-patchen:

module ActiveRecord
  class Errors
    def delete(key)
      @errors.delete(key.to_s)
    end
  end
end

Vielleicht nicht die feine Englische, aber es funktioniert :-)

Gruß,
Raphael
Caca1c832afcdd867e03e3e67e881ebc?d=identicon&s=25 Raphael J. Schmid (Guest)
on 2009-03-19 12:36
(Received via mailing list)
Hallo Urban,

> Wieso benutzt du eigentlich einen anderen Namen fuer dein Attribut?
> Ueberschreibe doch einfach die setter und getter methoden und speichere
> den Originalwert irgendwo ab. Dann mit read_attribute und
> write_attribute einfach den Wert schreiben. Da sollten dann eigentlich
> auch die validations laufen. Hoffe ich zumindest ;)

gute Idee, vermeidet unnötige Verwirrung bezüglich der Feldnamen -
vielen Dank! :-)

- Raphael
This topic is locked and can not be replied to.