【发布时间】:2019-03-12 10:57:46
【问题描述】:
我想拦截 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 一样),所以我不需要比较字符串,但我还没有看到任何地方的记录。
最好的解决方法是什么?
【问题讨论】:
-
Rails 中有一个叫做 i18n 的概念。按照这个链接。 guides.rubyonrails.org/i18n.html
标签: ruby-on-rails internationalization rails-i18n