ruby 迁移后的Rails I18n ActiveRecord模型属性

ekqde3dh  于 2023-01-08  发布在  Ruby
关注(0)|答案(1)|浏览(183)

我开始创建一个应用程序,并规划了我的基本搭建。让我们假设我创建了以下资源:

rails g scaffold CircusAnimal fieldOne:string fieldTwo:string

我使用Rails I18n来翻译表单上的标签,使用的代码是:

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列。
如何使新添加的字段像最初搭建的前两个字段一样进行翻译?

mrwjdhj3

mrwjdhj31#

我的错,我知道发生了什么。有问题的资源(我们称之为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资源的视图中获得的!

相关问题