我是一名从事Rails / Slim应用程序的网页设计师。我对Rails并不是很熟悉...
我的任务是建立导航菜单。我记得使用Jekyll(一个红宝石静态站点生成器)。我曾经将导航数据存储为yaml。这包括导航项标签和以及指向路径的链接。
我想知道我是否可以在rails中做同样的事情。例如,如何在应用程序助手控制器中遍历此数组并在视图中打印出导航?
$navPages = [
["Home", "root_path"],
["Page A",
["Sub Page 1", "page_a_1_index_path"],
["Sub Page 2", "page_a_2_index_path"],
],
["Page B", "page_b_index_path"],
["Page C",
["Sub Page 1", "page_c_1_index_path"],
["Sub Page 2", "page_c_2_index_path"],
["Sub Page 3", "page_c_3_index_path"]
]
]
注意:“页面A”和“页面C”仅是导航父项,而不是实际链接。
答案 0 :(得分:0)
不是最好的方法,只是查看给定的数组即可,您肯定会找到一种更好的方法
<nav>
<% navPages.each do |menu| %>
<ul>
<% flatten_menu = menu.flatten.drop(1) %>
<% if flatten_menu.one? %>
<li><%= link_to "#{menu[0]}", menu[1] %></li>
<% else %>
<li>
<%= menu[0] %>
<ul>
<% flatten_menu.each_slice(2) do |sub| %>
<li><%= link_to "#{sub[0]}", sub[1] %></li>
<% end %>
</ul>
</li>
<% end %>
</ul>
<% end %>
</nav>
答案 1 :(得分:0)
这是我想出的。如果您不熟悉它,它采用Slim语法。
首先,我更改了导航数据的形状:
$navPages = [
[
"Page A",
"page_a_index_path",
""
],
[
"Page B",
"",
[
[ "Sub Page 1", "sub_page_a_1_index_path"],
[ "Sub Page 2", "sub_page_a_2_index_path"],
]
],
[ "Page C", "page_c_index_path", "" ],
[
"Page D",
"",
[
[ "Sub Page 1", "sub_page_d_1_index_path"],
[ "Sub Page 2", "sub_page_d_2_index_path"],
]
],
]
然后我遍历它:
ul.menu
- $navPages.each do |label, path, items|
- if path != ""
li
= link_to label, self.send(path.to_sym)
- else
li.has-children
= link_to label, "#"
- if items != ""
ul
- items.each do |nlabel, npath|
li
= link_to nlabel, self.send(npath.to_sym)