在en.yml文件中更改属性名称不起作用

时间:2013-01-07 15:48:49

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我在rails项目的ruby中更改了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 not not blank”。代码位不在activerecord中。在一点代码工作正常之前。

1 个答案:

答案 0 :(得分:2)

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

如果不起作用,请使用bundle show activemodel找到已安装的gem源,然后在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"