2010-01-14 20 views
6

Ho aggiunto un campo aggiuntivo alla mia nuova forma:Convalida campo non-modello

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

Specifica il numero di copie del disco da creare.

Come posso convalidare la presenza (o la numericità) di quel campo, poiché non fa parte del modello stesso?

validates_presence_of :quantityfallisce !!!

risposta

12

Trovato. Si consiglia di aggiungere un attributo virtuale nel modello.

......... 

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

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

Utilizzare validates_numericality_of convalida. La convalida della numericità per i controlli di default per il tipo float, devi dirti di voler vedere gli interi. Dato che la quantità non verrà memorizzata in db, deve essere virtuale.

Prova questo:

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

validates_numericality_of non accetta zero per impostazione predefinita, non dovrebbe essere necessario per verificare la presenza dell'attributo, e come si potrebbe desiderare di modificare l'intervallo della quantità nella visualizzazione I non lo convalida qui.

Si desidera convalidare l'intervallo, dichiararlo come costante nel modello. Fare riferimento a questa costante sia nella convalida che nella visualizzazione.

+0

Ho ricevuto la seguente eccezione con questa implementazione: metodo non definito 'quantity_before_type_cast ' Qualche idea? – Lee

+0

È possibile scrivere il metodo 'quantity_before_type_cast 'e restituire self.quantity. Non è molto pulito ma una soluzione. –

Problemi correlati