Sí, utilice el método 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
Agregado: No puede utilizar las validaciones como validates_length_of
ya que el método de validación no entiende el formato de su campo en serie.
validates_each
El método es bueno, ya que le permite escribir su propio método de validación. El método puede agregar un error al registro si corresponde.
Consejo: También puede agregar un error a la :base
de record.errors en lugar de al atributo específico. A veces, esto puede ayudar con el formateo de los mensajes de error en sus vistas.