2015-04-22 11 views
6

yml numaramdaki öğeleri nasıl listeleyebilirim? Geçerli kodum sadece listedeki son öğeyi alır. Öğelerin listesi görünümünde döngü yapmak ve title ve description öğelerini görüntülemek istiyorum.Raylar i18n öğelerin listesi ve döngü içinde görünüm

örn.

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" 

görünüm:

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

Sonuç:

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

İstenilen Sonuç:

first item 
    a random description 

    second item 
    another item description 

cevap

8

bunu kullanın yerine: Ayrıca

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

, sizin ürün listesi doğru tanımlanmadı:

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

kullanın aşağıdaki sözdizimi YAML bir diziyi tanımlamak için:

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

Bunu kontrol etmek için IRB konsolunda yapabilirsin:

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 
+0

Evet! Bu yaptı. Çok iyi. Düzgün döngü için bir ".each" eklemek zorunda kaldı. – DogEatDog