我在config.rb中使用以下代码生成动态页面
data.generated.each do |i|
proxy "#{i.id}.html", "/generated/template.html", :locals => { :i => i }, :ignore => true
end和source/generated/template.html.erb格式的模板
<% i = locals[:i] %>
<h1><%= i.title %></h1>如何动态地创建指向这些生成的下一个和前一个页面的链接?
发布于 2017-05-31 20:22:15
有一种简单的方法可以生成除第一个和最后一个页面以外的所有页面:
data.generated.each_cons(3) do |prev, curr, nxt|
proxy "#{curr.id}.html",
"/generated/template.html",
locals: { prev: prev, curr: curr, next: nxt },
ignore: true
end上面的代码将从第二页curr开始。我找不到快速的解决方案来以优雅的方式处理这些角落案例,所以我们只能手动生成这些页面:
def generate_page prev, curr, nxt
proxy "#{curr.id}.html",
"/generated/template.html",
locals: { prev: prev, curr: curr, next: nxt },
ignore: true
end
data_generated = data.generated
data_generated.each_cons(3).with_index do |(prev, curr, nxt), idx|
generate_page(nil, prev, curr) if idx == 0
generate_page(prev, curr, nxt)
generate_page(curr, nxt, nil) if idx == data_generated.size
end<% prev, curr, nxt = locals.values_at(*%i|prev curr next|) %>
<h1><%= curr.title %></h1>
<a href="<%= prev.id %>.html">⇐ <%= prev.title %></a> |
<a href="<%= nxt.id %>.html"><%= nxt.title %> ⇒</a>可能需要对构建链接时需要的nxt/prev不是nil进行额外的检查。
https://stackoverflow.com/questions/44284578
复制相似问题