首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord RecordNotFound定位

ActiveRecord RecordNotFound定位
EN

Stack Overflow用户
提问于 2013-10-23 09:46:04
回答 3查看 2.7K关注 0票数 4

我正在尝试本地化我的rails应用程序(webservice)。我安装了创业板“rails-i18n”,运行良好。

但它不翻译ActiveRecord::RecordNotFound消息。在rails代码中:methods.rb

代码语言:javascript
复制
raise RecordNotFound, "Couldn't find #{@klass.name} with #{conditions.to_a.collect {|p| p.join(' = ')}.join(', ')}"

信息似乎是硬编码的。

除了不使用Model.find_by_‘属性之外,还有其他解决方案吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-30 09:24:02

我有足够的理由告诉用户更多的信息:

代码语言:javascript
复制
exception.message.match /^Couldn't find (\w+) with (id=([\S]*))?/
msg = t 'activerecord.exceptions.not_found', klass: $1, id: $3

既然我想要捷克人的交易:

代码语言:javascript
复制
cs:
  activerecord:
    exceptions:
      not_found: "Nelze nalézt %{klass} s id=%{id}"

..when是硬编码的,唯一的方法就是硬去编码它。

票数 5
EN

Stack Overflow用户

发布于 2015-07-27 12:09:56

YAML配置的另一种方式:

代码语言:javascript
复制
en:
 activerecord:
   exceptions:
     not_found: "%{model_name} not found"

还可以为模型名称设置复数形式,添加如下:

代码语言:javascript
复制
en:
  activerecord:
    models:
      user:
        one: Dude
        other: Dudes
票数 2
EN

Stack Overflow用户

发布于 2013-10-23 09:58:29

您可以在应用程序控制器中捕获RecordNotFound异常并返回本地化消息。通过这种方式,您还可以更改404的默认行为:

代码语言:javascript
复制
class ApplicationController < ActionController::Base

  rescue_from ActiveRecord::RecordNotFound, :with => :not_found

  private

    def not_found
      render :json => { :message => I18n.t('exception.record_not_found') },
             :status => :not_found
    end

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

https://stackoverflow.com/questions/19538272

复制
相关文章

相似问题

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