【问题标题】:Rails i18n Attributes Not Working via JSON APIRails i18n 属性无法通过 JSON API 工作
【发布时间】:2016-01-31 11:59:44
【问题描述】:

我们有一个 RoR 4.2.5.1 API 服务器和一个 AngularJS 前端。

我正在努力让国际主义发挥作用,并将我的 en.yml 设置为这样

en:
  activerecord:
    attributes:
      nas:
        calledstationid: 'AP Mac'
    errors:
      models:
        nas:
          attributes:
            calledstationid:
              blank:
              invalid:
              taken: "has already been added to a location"

当我使用被调用的stationid 创建“nas”时,我期待“AP Mac 已添加到某个位置”。

相反,我得到“称为stationid...”

def create
  @nas = Nas.new(
    calledstationid: params[:box][:calledstationid]
  )
  respond_to do |format|
    if @nas.save
      format.json { render template: 'api/v1/boxes/show.json.jbuilder', status: 201 }
    else
      @errors = @nas.errors
      format.json { render template: 'api/v1/shared/index.json.jbuilder', status: 422 }
    end
  end
end

当我使用 bang 时,我可以在日志中看到 calledstationid is 替换为 ap mac。

所以...我的问题是,为什么@nas.errors 对象中的字段名称没有更新?我怎样才能让它适用于多个语言环境。

-- 编辑--

错误对象:

@messages={:calledstationid=>["has already been added to a location"]}>

【问题讨论】:

  • 要获取@nas.errors 中的值,您需要使用.save.valid?.save! 不会填充它。
  • 是的,我知道这一点。我正在使用!来证明这个值是正确的。
  • 那么问题是什么?
  • 阅读问题? :我的问题是,为什么@nas.errors 对象中的字段名称没有更新?我怎样才能让它适用于多个语言环境。”
  • 完美,对它进行排序。如果你做出回答,我会接受。干杯!

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


【解决方案1】:

你有 2 个选项来解决这个问题。

第一:

编辑您的 yaml 文件并将消息替换为以下内容:

"%{attribute} has already been added to a location"

第二:

根据当前 YAML 配置,您得到的是标准且正确的输出。但是要获得您要查找的内容,而不更改 YAML,需要使用ActiveModel::Errors#full_messages。因为此方法将属性名称添加到错误消息中

【讨论】:

  • 在我的具体情况下,我更改了 nas.errors ---> nas.errors.full_messages
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2017-11-25
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多