Rails i18n项目列表并在视图中循环

Dog*_*Dog 6 ruby-on-rails rails-i18n

如何列出我的元素yml并在视图中循环它们并访问它们的属性?我当前的代码只获取列表中的最后一项.我想在视图中循环遍历项目列表并显示它们titledescription元素.

例如

阳明:

en:
  hello: "Hello world"
  front_page:
    index:
      description_section:
        title: "MyTitle"
        items:
          item:
            title: "first item"
            description: "a random description"
          item:
            title: "second item"
            description: "another item description"
Run Code Online (Sandbox Code Playgroud)

视图:

      <%= t('front_page.index.description_section.items')do |item| %>
          <%= item.title %>
          <%= item.description %>
      <%end %>
Run Code Online (Sandbox Code Playgroud)

结果:

   {:item=>{:title=>"second item", :description=>"another item description"}} 
Run Code Online (Sandbox Code Playgroud)

期望的结果:

    first item
    a random description

    second item
    another item description
Run Code Online (Sandbox Code Playgroud)

MrY*_*iji 9

请改用:

<% t('front_page.index.description_section.items').each do |item| %>
# ^ no equal sign here
  <%= item[:title] %>
     #^^^^ this is a hash
  <%= item[:description] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

此外,您的商品列表未正确定义:

t('front_page.index.description_section.items.item.title')
# => returns "second item" because the key `item` has been overwritten
Run Code Online (Sandbox Code Playgroud)

使用以下语法在YAML中定义数组:

items:
- title: "first item"
  description: "a random description"
- title: "second item"
  description: "another item description"
Run Code Online (Sandbox Code Playgroud)

要检查这一点,您可以在IRB控制台中执行此操作:

h = {:items=>[{:title=>"first item", :description=>"desc1"}, {:title=>"second item", :description=>"desc2"}]} 
puts h.to_yaml
# => returns
---
:items:
- :title: first item
  :description: desc1
- :title: second item
  :description: desc2
Run Code Online (Sandbox Code Playgroud)