【问题标题】:Rails i18n list of items and looping in viewRails i18n 项目列表和循环视图
【发布时间】:2015-04-22 17:44:42
【问题描述】:

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

例如

yml:

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"

查看:

      <%= t('front_page.index.description_section.items')do |item| %>
          <%= item.title %>
          <%= item.description %>
      <%end %>

结果:

   {:item=>{:title=>"second item", :description=>"another item description"}} 

期望的结果:

    first item
    a random description

    second item
    another item description

【问题讨论】:

    标签: ruby-on-rails rails-i18n


    【解决方案1】:

    改用这个:

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

    另外,您的项目列表定义不正确:

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

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

    items:
    - title: "first item"
      description: "a random description"
    - title: "second item"
      description: "another item description"
    

    要检查这一点,您可以在 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
    

    【讨论】:

    • 是的!做到了。跑得很好。我必须添加一个.each 才能正确循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多