Можно ли добавлять ошибки к объекту ActiveRecord, не связывая их с определенным атрибутом?
Если вам нужно закодировать значительно сложную проверку, ошибка иногда не лежит в определенном атрибуте, а в комбинации нескольких из них.
Например, если я хочу проверить, что a период времени между: start_date и: end_date не содержит какого-либо воскресенья, ошибка не относится конкретно к любому из этих полей, но метод добавления ошибок требует указать его.
Ответы
Ответ 1
Попробуйте сделать что-то вроде этого:
# Your Model.rb
validate :my_own_validation_method
...
private
def my_own_validation_method
if there_is_no_sunday_in_the_range
self.errors[:base] << "You must have a Sunday in the time range!"
end
end
В принципе, вы можете добавить свои собственные сложные проверки в модель, и когда вы увидите, что произошло что-то ошибочное, вы можете добавить строку ошибок в массив ошибок.
Ответ 2
model_instance.errors[:base] << "msg"
Ответ 3
Вы можете использовать errors[:base]
для добавления общих ошибок, которые специально не привязаны к одному атрибуту - ссылка для направляющих.
Ответ 4
Фактически вы можете называть хеш-ключ:
instance.errors[:case_of_the_sundays] << "Error, son."
Немного более описательный.
Ответ 5
Ответы выше устарели. Для Rails 5 и выше вам необходимо вызвать ActiveModel:: Ошибки добавить метод с :base
в качестве первого параметра. См. Пример ниже.
model_instance.errors.add(
:base,
:name_or_email_blank,
message: "either name or email must be present"
)