2015-04-22 8 views
6

Come è possibile elencare gli elementi nel mio yml e collegarli tra loro nella vista e accedere alle relative proprietà? Il mio codice corrente ottiene solo l'ultimo elemento nell'elenco. Voglio scorrere nella vista l'elenco degli elementi e visualizzare i loro elementi title e description.Rails i18n elenco di elementi e looping in vista

ad es.

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" 

vista:

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

Risultato:

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

Risultato desiderato:

first item 
    a random description 

    second item 
    another item description 

risposta

8

Utilizzare questo, invece:

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

Inoltre, lista dei tuoi oggetti non è definito correttamente:

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

utilizzare la seguente sintassi per definire un array in YAML:

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

di controllare questo , puoi farlo nella tua console 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 
+0

Sì! Questo è stato. È stato fantastico. Ho dovuto aggiungere un '.each' per farlo girare correttamente. – DogEatDog