Да, используйте метод 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
Добавлено: Вы не можете использовать проверки, такие как validates_length_of
, так как метод проверки не понимает формат вашего сериализованного поля.
Метод validates_each
хорош, поскольку он позволяет вам написать свой собственный метод проверки. Затем метод может добавить ошибку к записи, если это необходимо.
Совет: Вы также можете добавить ошибку к :base
record.errors, а не к определенному атрибуту. Иногда это может помочь с форматированием сообщений об ошибках в ваших представлениях.