3 Stimmen

Rails 3. Falscher Wert von Integer-Attributen in einem Formular belassen

Ich habe das Modell 'Human' und dieses Modell hat ein ganzzahliges Attribut :age.
Zum Beispiel verwende ich eine Validierung für dieses ganzzahlige Attribut :age.

Wenn ich einen neuen 'Human' mit einem falschen Wert von :age hinzufüge (z.B. "2aaa3"), wird mir ein Fehler angezeigt, aber es wird auch :age wie "2" geschnitten. Aber das möchte ich nicht. Ich möchte den letzten falschen Wert "2aaa3" stehen lassen.

Also, die Frage lautet "Wie kann ich das tun?"

0voto

Kunday Punkte 1041

Dies ist das Standardverhalten der Validierung in Rails. Ich bin mir nicht sicher, ob es andere Möglichkeiten gibt, dies zu überschreiben. Sie könnten die Validierung jedoch mit JavaScript durchführen, was viel benutzerorientierter wäre als die Verwendung von validates_numericality_of.

0voto

shpakvel Punkte 79

Hallo an alle, die sich für meine Frage interessieren.

Ich freue mich zu sagen, dass ich die Lösung selbst gefunden habe. Aber ich habe dazu einige Anmerkungen. ))

Erstens, die Lösung lautet:

class ApplicationController < ActionController::Base
...
...
  after_filter: restore_int_value, :only => [:create, :update]
...
...
  private
...
...
  def restore_int_value
    response.body = response.body.gsub(/(numeric.*

`

Zweitens, die Anmerkungen lauten:

1) die Lösung funktioniert zusammen mit solchen Gems wie 'Formtastic' und 'Simple_form'. Diese Gems erstellen die Formulare in detailliertem HTML und ermöglichen uns die Verwendung von Regex. Wenn Sie solche Gems nicht verwenden, können Sie einfach alle Ihre Integer-Attribute z.B. in einem 'p'-Tag mit der Klasse 'numeric' einwickeln, wie folgt, und ich denke meine Lösung wird auch dafür funktionieren:

 <%= text_field(:human, :age) %> 

2) Ich glaube, meine Lösung wird nicht für Integer-Felder von verschachtelten Modellen in einem Formular mit mehreren Modellen funktionieren. (Ryan Bates beschreibt diese Art von Arbeit in "Handle Multiple Models in One Form" von "Advanced Rails Recipes"). Aber wenn Sie Ryan Bates' Artikel lesen, werden Sie sehen, dass er bereits JavaScript verwendet. Wenn Sie also mit verschachtelten Modellen in Formularen arbeiten, benötigen Sie JavaScript. Dann können Sie JavaScript auch für die Validierung verwenden (wie Kunday es sagte). Und Sie werden kein Problem haben. ;) Aber wenn Sie eine statische Anzahl von verschachtelten Modellen im Formular haben und kein JavaScript verwenden, dann denke ich, dass Sie ein neues spezielles Regex für Ihre Bedürfnisse erstellen können (ähnlich dem, was ich erstellt habe). Ich hoffe, Sie werden damit zurechtkommen. ;)

Ich hoffe, ich habe alle Szenarien abgedeckt, in denen Sie ein solches Problem haben könnten, und meine Lösung wird für jemanden nützlich sein, außer für mich. ;)

`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X