我更改了en中的属性名称。ruby on rails项目中的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。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 bedroom could not be blank'。代码位不能从activerecord中工作。
看lib/active_model/errors.rb
,我认为关键应该是'enr/affordable_温情'而不是affordable温情,但你可能需要以某种方式指定" 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"