我遗漏了一些关于变量可见性的内容。 在我的config.rb中,我使用数据结构来生成动态页面:
@pages = [
{
id: "cookies",
title: "Happy Chocolate Chip Cookies",
quote: "These cute cookies are full of sweet chocolate and ready to give you energy!",
content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."
},
....]
@pages.each do |p|
page "/creations/#{p[:id]}.html", :proxy => "item-template.html", :ignore => true do
@tile = p
end
end
页面生成顺利,没问题。但..
我如何访问此数据结构以提供生成页面的动态链接?我希望能够使用以下代码创建索引页面(让我们称之为creations.html):
<ul>
<% @pages.each do |tile| %>
<li><a href="creations/<%= tile[:id]%>.html">
<%= tile[:title] %>
</a></li>
<% end %>
</ul>
答案 0 :(得分:2)
无需创建自定义帮助程序,您可以使用yaml数据文件填充模板并生成链接列表。让我解释一下。
在与源和构建目录相同的级别上,确保创建数据目录。 即:
在其中创建一个名为“pages.yml”的文件(例如)。
此文件需要经过特殊格式化,因此请小心(或使用yaml parser确保您没有任何错误 - 例如缺少逗号或转义引号)。
使用config.rb文件中的数据,例如:
- id: "cookies"
title: "Happy Chocolate Chip Cookies"
quote: "These cute cookies are full of sweet chocolate and ready to give you energy!"
content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."
- id: "bacon"
title: "Smoked bacon bits"
quote: "everything tastes better with bacon!"
content: "blah"
等...
现在,在您的config.rb文件中,将 @ pages.each do | p | 替换为 data.pages.each do | p |
data.pages.each循环遍历新创建的yaml文件中的每个项目
然后您可以简单地在索引文件(creations.html)中引用相同的文件,如下所示:
<ul>
<% data.pages.each do |tile| %>
<li><a href="creations/<%= tile[:id]%>.html">
<%= tile[:title] %>
</a></li>
<% end %>
</ul>
我在动态网页上遇到类似问题,您可以参考here
希望这会有所帮助。祝你好运!
答案 1 :(得分:1)
也许添加一个帮助器,在您的文件@pages
中返回creations.erb
数据结构。即在config.rb
文件中添加:
helpers do
def dynamic_pages()
@pages
end
end
然后在creations.erb
中:
<ul>
<% dynamic_pages.each do |tile| %>
<li><a href="creations/<%= tile[:id]%>.html">
<%= tile[:title] %>
</a></li>
<% end %>
</ul>
而且,如果你想在你的动态页面中引用动态页面(!),帮助者可以生成那个html,你可以调用... nah,没关系!