Ja, verwenden Sie die validates_each
Methode
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
Hinzugefügt: Sie können nicht die Validierungen verwenden wie validates_length_of
da die Validierungsmethode das Format der serialisierten Feld nicht versteht.
Die Methode validates_each
ist gut, da Sie damit Ihre eigene Validierungsmethode schreiben können. Die Methode kann dann dem Datensatz gegebenenfalls einen Fehler hinzufügen.
Tipp: Sie können auch einen Fehler in die Datei :base
von record.errors anstelle des spezifischen Attributs einfügen. Manchmal kann dies bei der Formatierung der Fehlermeldungen in Ihren Ansichten helfen.