Это старый вопрос, но я хотел поделиться с вами тем, как я обрабатываю пользовательские ошибки в Rails, включая прикрепление сообщений об ошибках, тестирование и как обрабатывать это с ActiveRecord
моделями.
Создание пользовательской ошибки
class MyClass
# create a custome error
class MissingRequirement < StandardError; end
def my_instance_method
raise MyClass::MissingRequirement, "My error msg" unless true
end
end
Тестирование (минитест)
test "should raise MissingRequirement if ____ is missing"
# should raise an error
error = assert_raises(MyClass::MissingRequirement) {
MyClass.new.my_instance_method
}
assert error.message = "My error msg"
end
с ActiveRecord
Я думаю, что стоит отметить, что при работе с моделью ActiveRecord
популярным шаблоном является добавление в модель ошибки, как описано ниже, так что ваши проверки не пройдут:
def MyModel < ActiveRecord::Base
validate :code_does_not_contain_hyphens
def code_does_not_contain_hyphens
errors.add(:code, "cannot contain hyphens") if code.include?("-")
end
end
Когда проверки выполняются, этот метод добавляется в класс ошибок ActiveRecord::RecordInvalid
ActiveRecord и приводит к сбою проверок.
Надеюсь, это поможет!