2010-01-14 7 views
6

Ich habe ein zusätzliches Feld meiner neue Form hinzugefügt:Validate nicht-Modellfeld

<%= select_tag :quantity, options_for_select(["Select a Value"].concat((1..10).to_a)) %> 

Es gibt die Anzahl der Kopien des Datensatzes erstellt werden.

Wie kann ich die Anwesenheit (oder die Numerizität) dieses Feldes validieren, da es nicht Teil des Modells selbst ist?

validates_presence_of :quantityschlägt fehl !!!

Antwort

12

Gefunden. Möglicherweise möchten Sie ein virtuelles Attribut im Modell hinzufügen.

......... 

attr_accessor :not_on_db 
......... 

validates_presence_of  :not_on_db, 
validates_length_of  :not_on_db, :within => 1..5 
......... 
1

Verwenden Sie validates_numericality_of_validierung. Die Validitätsvalidierung überprüft standardmäßig den Gleitkommatyp. Sie müssen angeben, dass ganze Zahlen angezeigt werden sollen. Da die Menge nicht in db gespeichert wird, muss sie virtuell sein.

Versuchen Sie folgendes:

attr_accessor :quantity 
validates_numericality_of :quantity, :only_integer => true 

validates_numericality_of nicht Null standardmäßig akzeptieren, sollten Sie nicht das Vorhandensein des Attributs überprüfen müssen, und wie Sie vielleicht den Bereich der Menge in der Ansicht, die ich ändern wollen würde es hier nicht bestätigen.

Sie möchten den Bereich validieren, als Konstante im Modell deklarieren. Beziehen Sie sich auf diese Konstante sowohl in der Validierung als auch in der Ansicht.

+0

Ich habe die folgende Ausnahme mit dieser Implementierung erhalten: undefined Methode 'quantity_before_type_cast ' Irgendwelche Ideen? – Lee

+0

Sie können die Methode 'quantity_before_type_cast 'schreiben und self.quantity zurückgeben. Es ist nicht sehr sauber, aber eine Lösung. –