2010-08-31 5 views

risposta

204

Dal Rails 3, si può fare:

validates :field, inclusion: { in: [ true, false ] } 
+1

+1 Sì. Mi piace che forniscono un modo per farlo in quel modo. – DJTripleThreat

+2

Quindi, questo ottiene la convalida corretta, ma il messaggio di errore non è utile per l'utente finale: "myfield non è incluso nell'elenco" –

+2

Buon punto. È possibile personalizzare il messaggio di errore: http://guides.rubyonrails.org/active_record_validations_callbacks.html#message –

37

credo che per un campo booleano è necessario fare qualcosa di simile:

validates_inclusion_of :field_name, :in => [true, false] 

da una versione precedente del API: "Questo è dovuto al modo in Object # vuoto gestisce i valori booleani falso?.. blank? # => true "

Non sono sicuro se questo andrà bene per Rails 3, spero che sia stato d'aiuto!

+0

lol @ Rails 3. Posso scommettere che questo sarà l'avvertimento per i mesi a venire. Ok, ho pensato che fosse così e tu sei d'accordo. Grazie! – DJTripleThreat

+0

È vero per Rails 4! Wow, false.blank? # => true sembra proprio la risposta * errata *, qualcosa che non mi aspetterei da Rails. –

8

Quando applico questo, ottengo:

Attenzione da Shoulda-matchers:

Si utilizza validate_inclusion_of ad affermare che un valore booleano la colonna consente i valori booleani e non consente quelli non booleani. Si tenga presente che non è possibile testare completamente questo , poiché le colonne booleane convertiranno automaticamente valori non booleani in valori booleani da . Quindi, è dovrebbe prendere in considerazione la rimozione di questo test.

+0

Per i campi in cui è consentito nullo, converte comunque nil in booleano? – mwfearnley

Problemi correlati