使用多种语言过滤Rails验证错误(I18n)

时间:2019-03-12 10:57:47

标签: ruby-on-rails internationalization rails-i18n

我想拦截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一样),所以我不需要比较字符串,但是我没有看到它在任何地方都有记载。

最好的解决方法是什么?

0 个答案:

没有答案