我在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:
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中。在一点代码工作正常之前。
答案 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"