在 Ruby 部分内重复调用
Repeat calls inside Ruby partial
我是 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&showinfo=0"
但是对于上面的当前代码,如果我想要 多个 列表项(例如,第二个 'sermon_passage_lookup' 列表项,它不起作用。
如有任何帮助,我们将不胜感激。我想我需要一个
[something].each do |something|
但我不确定如何构建它。谢谢:)
编辑:实施 Taryn 的修复
Taryn,感谢你迄今为止的所有帮助。我现在看到了散列和数组之间的明显区别。我已经按照您的建议设置了部分模板:
<ul>
<% if locals.has_key? :sermon_links %>
<% sermon_links.each do |link| %>
<li>
<i class="material-icons"><%= 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>
如果您确保将 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 %>
编辑
下面评论中给出的示例的变体:
首先是主 .erb
模板:我认为您不需要多余的单词 :link
-> 只需将每个 link-set 放入主数组即可。此外,您不需要 link-hash 周围的额外数组,例如,您只需要:
:sermon_links => [
{ :icon => "link", :hyperlink => "http://www.facebook.com/", :link_label => "Testing" },
{:icon => "link2", :hyperlink => "http://google.com/", :link_label => "Testing2"} ]
即仅包含您需要的数据,不包含您不需要的数据。
这是一个散列,键为sermon_links
,值是一个数组。
该数组包含散列 - 每个散列对应于您需要列出的 link-数据。
然后,您的部分模板将需要从 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-icons"><%= link[:icon] %></i>
<a href="<%= link[:hyperlink] %>"><%= link[:link_label] %></a>
</li>
<% end %>
<% end %>
</ul>
我是 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&showinfo=0"
但是对于上面的当前代码,如果我想要 多个 列表项(例如,第二个 'sermon_passage_lookup' 列表项,它不起作用。
如有任何帮助,我们将不胜感激。我想我需要一个
[something].each do |something|
但我不确定如何构建它。谢谢:)
编辑:实施 Taryn 的修复
Taryn,感谢你迄今为止的所有帮助。我现在看到了散列和数组之间的明显区别。我已经按照您的建议设置了部分模板:
<ul>
<% if locals.has_key? :sermon_links %>
<% sermon_links.each do |link| %>
<li>
<i class="material-icons"><%= 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>
如果您确保将 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 %>
编辑
下面评论中给出的示例的变体:
首先是主 .erb
模板:我认为您不需要多余的单词 :link
-> 只需将每个 link-set 放入主数组即可。此外,您不需要 link-hash 周围的额外数组,例如,您只需要:
:sermon_links => [
{ :icon => "link", :hyperlink => "http://www.facebook.com/", :link_label => "Testing" },
{:icon => "link2", :hyperlink => "http://google.com/", :link_label => "Testing2"} ]
即仅包含您需要的数据,不包含您不需要的数据。
这是一个散列,键为sermon_links
,值是一个数组。
该数组包含散列 - 每个散列对应于您需要列出的 link-数据。
然后,您的部分模板将需要从 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-icons"><%= link[:icon] %></i>
<a href="<%= link[:hyperlink] %>"><%= link[:link_label] %></a>
</li>
<% end %>
<% end %>
</ul>