首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在带有关联的ActiveRecordError上使用rails-i18n?

如何在带有关联的ActiveRecordError上使用rails-i18n?
EN

Stack Overflow用户
提问于 2011-11-30 21:07:52
回答 2查看 676关注 0票数 5

我在试着翻译https://github.com/lifo/docrails/blob/master/activerecord/lib/active_record/associations.rb

在我的控制器文件中,我有:

代码语言:javascript
复制
@book = Book.find(params[:id])

begin
  @book.destroy
rescue ActiveRecord::DeleteRestrictionError => e
  flash[:error]= e.message # <<< Translate this message ?
end

这是我使用的转换文件:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/th.rb

如何为translate "#{e.message}"编写代码

EN

回答 2

Stack Overflow用户

发布于 2011-12-05 15:45:13

您可以在en.yml文件中使用它

代码语言:javascript
复制
activerecord:
   book:
    error: 'book error: %{e}'

你可以用这个改变你的救援区

代码语言:javascript
复制
flash[:error] = t("book.error") % {:e => e.message}

这在ma案例中是有效的。

票数 1
EN

Stack Overflow用户

发布于 2020-03-20 13:42:04

我以前也遇到过同样的问题。

所以有两种解决方案;

a.您可以通过手动指定"code“来刷新翻译后的错误。

代码语言:javascript
复制
@book = Book.find(params[:id])

begin
  @book.destroy
rescue ActiveRecord::DeleteRestrictionError => e
  flash[:error]= I18n.t('en.activerecord.errors.messages.restrict_dependent_destroy')
end

b.或者你可以使用你正在使用的gem rails-i18n

首先,您需要配置book模型:

代码语言:javascript
复制
has_many :children, dependent: :restrict_with_error

然后你就可以这样做

代码语言:javascript
复制
@book = Book.find(params[:id])

if @book.destroy
  # show success message
else
  flash[:error] = resource.errors.messages[:base].join(', ')
  # should include the translated error message if you are using rails-i18n
end

我假设您使用的是:restrict_with_exception而不是:restrict_with_error,只是为了以防万一提供一个替代方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8326442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档