Ho un modello con un attributo serializzato (array). Vorrei convalidare il modello solo se ogni membro dell'array è incluso nelle opzioni predeterminate.Come eseguire una convalida di inclusione su un attributo serializzato?
Esempio: Ho un modello Persona che ha un attributo "mood". Gli utenti possono avere più di uno stato d'animo, ma ogni umore deve essere "felice", "triste", "stanco" o "arrabbiato".
Il modello sarebbe qualcosa di simile:
class Person < ActiveRecord::Base
MOODS = %w[happy sad tired angry]
# validates :inclusion => { :in => MOODS }
attr_accessible :mood
serialize :mood
end
La convalida commentato non funziona. C'è un modo per farlo funzionare o ho bisogno di una convalida personalizzata?
(. Nota: io non voglio creare un modello Mood separata)
Controllare questa documentazione, http://guides.rubyonrails.org/active_record_validations_callbacks.html#inclusion. Non è necessario creare convalide personalizzate per questo. – Chamnap
su attributi serializzati, altrimenti, il valore serializzato viene controllato per l'inclusione, il che significa che l'umore = [stanco, arrabbiato] fallirà poiché MOODS.include? (Mood) è false –
Ah, non ho visto il metodo serialize. La tua risposta dovrebbe essere proprio allora. – Chamnap