2016-08-15 4 views
0

Я новичок в Ruby, так что это может быть прямо. У меня есть частичное, что я хочу по существу заполнить список.Повторные звонки внутри части Ruby

Вот мой частичный (.erb) Код:

<ul> 
    <% if locals.has_key? :sermon_commentary %> 
    <li><i class="material-icons">link</i><a href="<%= sermon_commentary %>">Matthew Henry's Commentary on <%= sermon_passage %></a></li> 
    <% end %> 
    <% if locals.has_key? :sermon_passage_lookup %> 
    <li><i class="material-icons">link</i><a href="<%= sermon_passage_lookup %>"><%= sermon_passage %> on Bible Gateway</a></li> 
    <% end %> 
    <% if locals.has_key? :sermon_audio_download %> 
    <li><i class="material-icons">music_note</i><a href="/audio/<%= sermon_audio_download %>" download="/audio/<%= sermon_audio_download %>">Download this sermon (MP3 ~5mb)</a></li> 
    <% end %> 
</ul> 

А вот как я называю его в .html.erb файле:

:sermon_commentary => "https://www.biblegateway.com/resources/matthew-henry/Luke", 
    :sermon_passage_lookup => "https://www.biblegateway.com/passage/?search=Luke+4%3A14-21&version=NIV", 
    :sermon_audio_download => "FUSE_7th_August.mp3", 
    :sermon_video => "https://www.youtube-nocookie.com/embed/VzOYe8nUCS4?rel=0&amp;showinfo=0" 

Однако с текущим кодом выше, если я хочу несколько элементов списка (скажем, второго списка «sermon_passage_lookup», он не работает.

Любая помощь будет оценена. a

[something].each do |something| 

Но я не уверен, как его структурировать. Спасибо :)

EDIT: исправить ОСУЩЕСТВЛЕНИЕ Taryn в

Спасибо за вашу помощь до сих пор, Taryn. Теперь я вижу отчетливые различия между хэшем и массивом. Я установил свой частичный шаблон в соответствии с вашим предложением:

<ul> 
    <% if locals.has_key? :sermon_links %> 
    <% sermon_links.each do |link| %> 
     <li> 
     <i class="material-icon‌​s"><%= link[:icon] %></i> 
     <a href="<%= link[:hyperlink] %>"><%= link[:link_label] %></a> 
     </li> 
    <% end %> 
    <% end %> 
</ul> 

И я использую его в качестве такового:

:sermon_links => [ 
    { :icon => "link", :hyperlink => "http://www.facebook.com/", :link_label => "Testing" }, 
    { :icon => "link", :hyperlink => "http://google.com/", :link_label => "Testing2" } 
] 

К сожалению, я получаю сообщение об ошибке. Похоже, хеш «link» не распознается? Вот что бросает Chrome на меня:

NameError at /resources/sermons/the-fifth-act/fuse-14-08-16.html undefined local variable or method 'icon' for #<Middleman::Application:0x70168621815860>

+0

'undefined local variable or method 'icon'' Звучит так, будто у вас есть слово' icon' вместо ': icon' где-то ... или что-то подобное. Ruby ожидает, что это будет фактическое имя переменной, но вы, вероятно, имеете в виду что-то другое, например, символ. Возможно, у вас есть 'link [icon]' где вы должны иметь ссылку [: icon] '? –

+0

Несомненно, спасибо Тарыну. Кажется, теперь это рендеринг, но с еще одним причудой; с '<% = link [: icon]%>' и '{: icon =>" link ",: hyperlink =>" http://www.facebook.com/ ",: link_label =>" Beau "},' Я должен видеть это как вывод HTML: ' ссылка' однако я получаю кучу, если случайные символы в DOM: ' ссылка 'Любая идея, почему это может произойти? Еще раз спасибо за вашу помощь Тарын. Вы были спасателем жизни! – beauSpeak

+0

Новые ошибки должны быть поставлены в новый вопрос ... также кодовое форматирование в комментариях поистине ужасно и невозможно прочитать: P Можете ли вы задать новый вопрос - вы можете опубликовать ссылку здесь, чтобы я увидел ее в своем почтовом ящике :) –

ответ

1

, если вы убедитесь, что вы передаете в sermon_passage_lookups как массив (даже если есть один элемент), то вы можете позвонить по каждой из них так же, как вы говорите, например:

<% if locals.has_key? :sermon_passage_lookups %> 
    <% sermon_passage_lookups.each do |sermon_passage_lookup| %> 
    <li><i class="material-icons">link</i><a href="<%= sermon_passage_lookup %>"><%= sermon_passage %> on Bible Gateway</a></li> 
    <% end %> 
<% end %> 

EDIT

вариация на вашем примере, приведенном в комментариях ниже:

Во-первых, основной шаблон .erb: Я думаю, что вам не нужно избыточное слово :link здесь -> просто поместите каждый набор ссылок в основной массив. Кроме того, вам не нужен дополнительный массив вокруг канального хэша, например все, что вам нужно:

:sermon_links => [ 
    { :icon => "link", :hyperlink => "http://www.facebook‌​.com/", :link_label => "Testing" }, 
    {:icon => "link2", :hyperlink => "http://google.com/", :link_label => "Testing2"} ] 

т.е. включать в себя только те данные, что вам нужно, и ничего лишнего.

Это хэш с ключом sermon_links и значениемявляется массивом. Массив содержит хеши - каждый из них соответствует связанным данным, которые необходимо перечислить.

Затем вашему частному шаблону необходимо будет получить доступ к этим хэшам из массива sermon_links. Ваш пример в комментариях обрабатывает значения хэша, как если бы они были переменными (например, <%= icon %>), но это не сработает ...единственная переменная с именем sermon_links который затем использовать each превратить каждое значение в один хэш, который вы именования link, так что вы должны ссылаться link как хэш, чтобы получить значок из него ... как это:

<ul> 
    <% if locals.has_key? :sermon_links %> 
    <!-- at this point we have the full `sermon_links` --> 
    <% sermon_links.each do |link| %> 
     <!-- now we have a single `link` from the set eg 
     - { :icon => "link", 
      :hyperlink => "http://www.facebook‌​.com/", 
      :link_label => "Testing" } --> 
     <li> 
     <i class="material-icon‌​s"><%= link[:icon] %></i> 
     <a href="<%= link[:hyperlink] %>"><%= link[:link_label] %></a> 
     </li> 
    <% end %> 
    <% end %> 
</ul> 
+0

Спасибо Тарыну. При попытке следующие ': sermon_passage_lookups { : sermon_passage_lookup => "тест", : sermon_passage_lookup => "тест", : sermon_passage_lookup => "тест", }' я получаю ошибки. Нет кубиков. – beauSpeak

+0

Это потому, что вышеупомянутый фрагмент не является правильным рубином ... ни хэш, ни массив. вам понадобится: ': sermon_passage_loo kups => [{: sermon_passage_look up =>" test1 "}, {: sermon_passage_look up =>" test2 "}, {: sermon_passage_look up =>" test3 "}]' Это массив, содержащий три хэша. –

+0

(1/2) Спасибо Taryn. Как уже упоминалось, я все еще новичок в Ruby, поэтому я очень ценю всю эту удивительную помощь! Интересно, могу ли я упростить свою структуру. Я попробовал что-то вроде этого, но это привело к ошибкам: '

    <% if locals.has_key? : sermon_links%> <% sermon_links.each do | ссылка | %>
  • <я класс = "материал-иконы"><%= icon %><%= link_label %>
  • <% end %> <% end %>
' – beauSpeak