Я хочу перехватить ошибки валидации, выданные Rails, в регистрационной форме.На английском языке это работает следующим образом:
if @user.save
# Do whatever...
else
@errors = @user.errors.full_messages
if !@errors.index("Email has already been taken").nil?
# Present the user with a 'forgot password' UI
else
# Display the error on the screen
end
end
Поскольку тест для конкретной ошибки основан на жестко закодированном сравнении строк, он немного сложен, но работает, когда у меня есть только несколько исключительных случаев.
Однако это становится невероятно громоздким при использовании более чем одного языка, поскольку ошибки валидации уже локализованы, и мне пришлось бы использовать нечто чудовищное, как это:
if !@errors.index("Email has already been taken").nil? ||
!@errors.index("Email n'est pas disponible").nil? ||
!@errors.index("Email wurde bereits angenommen").nil? || ...
Я быМне нравится думать, что Rails может дать мне код состояния (как это делает HTTP), поэтому мне не нужно сравнивать строки, но я нигде не видел этого документированного.
Какой лучший обходной путь?