Sì, utilizzare il metodo validates_each
serialize :urls
validates_each :urls do |record, attr, value|
# value is an array of hashes
# eg [{'name' => 'hi', 'url' => 'bye'}, ...]
problems = ''
if value
value.each{|name_url|
problems << "Name #{name_url['name']} is missing its url. " \
unless name_url['url']}
else
problems = 'Please supply at least one name and url'
end
record.errors.add(:urls, problems) unless problems.empty?
end
Aggiunto: Non è possibile utilizzare le convalide, come validates_length_of
dal momento che il metodo di convalida non capisce il formato del campo serializzato.
Il metodo validates_each
è valido poiché consente di scrivere il proprio metodo di convalida. Il metodo può quindi aggiungere un errore al record, se appropriato.
Suggerimento: è inoltre possibile aggiungere un errore allo :base
di record.errors anziché all'attributo specifico. A volte questo può aiutare con la formattazione dei messaggi di errore nelle viste.
fonte
2010-10-04 17:20:00