3

我在 ruby​​ on rails 项目中更改了 en.yml 文件中的属性名称。按钮工作正常。但是字段属性没有改变。

这是我的模型,

class Enr::AffordableWarmth < ActiveRecord::Base
  self.table_name = "AffordableWarmth"
  self.primary_key = 'Record_No'

  validates_presence_of :No_Bedrooms, :No_Bedspaces, :Max_Annual_Energy_Cost
  validates :No_Bedrooms, uniqueness: { scope: :No_Bedspaces, 
    message: "already exists!" }
  validates_numericality_of :No_Bedrooms, :No_Bedspaces, :Max_Annual_Energy_Cost
end

en-GB.yml 文件

en-GB:
  helpers:
    submit:
      enr_rds_dea:
        create: 'Create new user'
        update: 'Update'

      enr_affordable_warmth:
        create: 'Create'
        update: 'Update'

  activerecord:
      models:
        AffordableWarmth:
      attributes:
        AffordableWarmth:
          No_Bedrooms: "Number of Bedrooms"

尽管如此,在 rails 控制台和表单中,它显示“No Bedrooms could not be blank”。一些代码在活动记录中不起作用。在一些代码工作正常之前。

4

1 回答 1

3

看着lib/active_model/errors.rb,我认为关键应该是 'enr/affordable_warmth' 而不是 AffordableWarmth,但您可能需要以某种方式指定“Enr”命名空间。

如果它不起作用,请使用 找到已安装的 gem 源bundle show activemodel,然后进行一些调试lib/active_model/errors.rb以准确找出它期望的 i18n 键。

更新:

以下是如何调试它:

我搜索 I18n,它执行翻译,所以我找到了generate_message生成整个错误消息的方法,它将翻译后的属性名称作为参数(见:attribute键),这将我引导到方法human_attribute_name,我发现在lib/active_model/translation.rb.

我添加以下行:

puts "human_attribute_name(#{attribute.inspect}, #{options.inspect}): defaults: #{defaults.inspect}"

就在I18n.translate, 之前并启动我的控制台。

对于Foo::User我得到的模型:

human_attribute_name("account_type", {}): defaults: [:"activerecord.attributes.foo/user.account_type", :"attributes.account_type", "Account type"]

所以这应该适合你:

  activerecord:
      attributes:
        "enr/affordable_warmth":
          no_bedrooms: "Number of Bedrooms"
于 2013-01-07T16:10:32.573 回答