Rails I18n迁移后的ActiveRecord模型属性



我开始创建一个应用程序,并计划好了我的基本脚手架。假设我创建了这个资源:

rails g scaffold CircusAnimal fieldOne:string fieldTwo:string

我使用RailsI18n来翻译表单上的标签,使用:

en:
activerecord:
attributes:
circus_animal:
fieldOne: Breed
fieldTwo: Trainer

到目前为止还不错,当我生成一个表单,其中包含模型的所有字段时,翻译都被正确提取:

<%= form.fields_for :circus_animals do |f| %>
<%= f.label :fieldOne %>
<%= f.text_field :fieldOne %>
<%= f.label :fieldTwo %>
<%= f.text_field :fieldTwo %>
<% end %>

然后我决定我需要这个表单的另一个字段,所以我运行了一个迁移:

rails g migration add_fieldThree_to_circusAnimal fieldThree:integer
rails db:migrate

我将新字段添加到控制器中允许的字段中,并将其添加到视图中。

<%= form.fields_for :circus_animal do |f| %>
<%= f.label :fieldOne %>
<%= f.text_field :fieldOne %>
<%= f.label :fieldTwo %>
<%= f.text_field :fieldTwo %>
+ <%= f.label :fieldThree %>
+ <%= f.number_field :fieldThree %>
<% end %>

我还在en.yml:中添加了一个翻译

en:
activerecord:
attributes:
circus_animal:
fieldOne: Breed
fieldTwo: Trainer
+       fieldThree: Age

但是,fieldThree的标签没有被翻译。我尝试过破坏资产,我尝试过运行rails db:schema:cache:clear,我也尝试过在rails控制台中运行它:

CircusAnimal.connection.schema_cache.clear!
CircusAnimal.reset_column_information

如果我运行CircusAnimal.columns,我会正确地看到fieldThree列。

如何像前两个最初是脚手架搭建的字段一样翻译新添加的字段?

我的错,我看到发生了什么。有问题的资源(称之为CircusAnimal)属于另一个资源(称其为Circus),因此CircusAnimal的表单字段与Circus表单字段一起包含在Circus资源的视图页面上。我在Circus资源的视图上添加了:fieldThree,而没有在CircusAnimal资源的视图中添加:因此,我的自定义i18n-tasks扫描仪将:fieldThreeCircus资源而不是CircusAnimal资源相关联。为了修复此问题,我只是将:fieldThree添加到CircusAnimal的视图中,扫描仪将其拾取并正确地将其与CircusAnimal关联。现在,当我在正确的资源下在en.yml中翻译它时,翻译正确地显示在视图中。对不起,愚蠢的错误!我试图在rails控制台中用I18n.t('activerecords.attributes.circus_animal.fieldThree')进行翻译,结果发现翻译键丢失了。这让我注意到密钥位于错误的资源下,因为它是从Circus资源的视图中提取的!

最新更新