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

我在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控制台和表单中它显示“没有卧室不能为空”。 代码位不能从activerecord中运行。 在一点代码工作正常之前。

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

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

更新:

以下是调试方法:

我搜索I18n,它执行translaton,所以我找到方法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"