2012-11-20 2 views
11

Ho un modello in cui mi piacerebbe limitare l'input per un campo o essere nullo o rientrare in una specifica serie di valori. Posso ottenere la parte di lavoro di inclusione, ma il bit allow_nil: true non sembra funzionare per me:Convalida in inclusione all'interno di una serie di opzioni OPPURE essere n.

class Mock::Patient < ActiveRecord::Base 
    LANGUAGE_OPTIONS = %w[English Spanish French German Chinese Hindi Punjabi] 
    validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS } 
end 

Ho provato la modifica che ultima riga a cose come:

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS }, allow_nil: true 

Ma a nessuno inutilmente. Qual è il modo più semplice per esprimere questa combinazione di inclusione semplice o nulla?

risposta

10

la forma corretta per consentire zero a convalidare pur consentendo una gamma limitata di valori è il seguente:

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS, allow_nil: true } 

notare come l'opzione allow_nil è all'interno l'opzione inclusione hash

0

ho risolto questo facendo i Convalida linea simile a questa:

validates :preferred_language, inclusion: { in: LANGUAGE_OPTIONS + [nil] } 

In questo modo, mi permettono pari a zero, ma non cambio la costante che uso nel mio punto di vista per l'alimentazione la raccolta di selezionare le opzioni . Da allora ho anche anteposto la matrice con un elemento '' quindi non devo includere in modo esplicito vuoto nel mio helper di input del modulo.