Подтвердить что ты не робот

Можно ли добавлять ошибки к объекту ActiveRecord, не связывая их с определенным атрибутом?

Если вам нужно закодировать значительно сложную проверку, ошибка иногда не лежит в определенном атрибуте, а в комбинации нескольких из них.

Например, если я хочу проверить, что a период времени между: start_date и: end_date не содержит какого-либо воскресенья, ошибка не относится конкретно к любому из этих полей, но метод добавления ошибок требует указать его.

4b9b3361

Ответ 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"
)