Rails生成站点导航的方式

时间:2011-09-28 19:30:47

标签: ruby-on-rails list hash navigation loops

大多数网站的导航采用html无序列表的形式,列表元素中包含锚点。输入所有这些项目标签似乎不是用于创建导航列表的rails DRY方式。

我问你如何创建导航列表以及如何帮助我开发我正在尝试下面描述的方法......

我所做的是在我的application_helper中创建一个哈希,然后在我的erb文件中添加一个快速迭代代码,为我生成列表。

app helper:

               $navPages = { 
                          'top1' => "top1_path",
                          'top2' => "top2_path",
                          'top3' => "top3_path",

                          }

html.erb迭代代码:

<ul>
           <% $navPages.each do |ntext,npath| %>
           <li><%= link_to ntext, self.send(npath.to_sym) %></li>
           <% end %>
</ul>

列出输出:

<ul>
    <li><a href="/">top1</a></li>
    <li><a href="/">top2</a></li>
    <li><a href="/">top3</a></li>
</ul>

这似乎对我很不利......我在扩展这个列表中的“子项目”或列表中的列表时遇到了问题。

我创建了哈希:

    $myHash = { 
           'top1' => { :location => "top1_path"},
           'top2' => { :location => "top2_path", :members => { 
                          "sub1-1" => { :location => "sub1_path"},
                          "sub1-2" => { :location => "sub2_path"},
                          "sub1-3" => { :location => "sub3_path"},

                          }
           },
           'top3' => { :location => "top3_path", :members => { 
                          "sub2-1" => { :location => "sub1_path"},
                          "sub2-2" => { :location => "sub2_path"},
                          "sub2-3" => { :location => "sub3_path"},

                          }
           }


               }

我已经尝试了很多方法将该哈希转换为带有锚点的无序列表,但我还没有找到一个完美运行的干净解决方案。有关如何做到这一点的任何想法?我喜欢这项任务哈希的原因是我可以捕获项目的关联以及其他有用的信息,例如我存储在:位置符号中的链接位置。

我认为哈希可以/应该换成输入较少的东西......比如

top1 loc
  member1 loc
  member2 loc
top2 loc

虽然不确定在哪里统计:(

所以......使用这些信息生成一个HTML列表对我来说似乎并不是很困难......轨道上的每个人都在做什么?

谢谢!

谢谢!

2 个答案:

答案 0 :(得分:0)

我的建议是考虑使用Simple Navigation宝石。这有一个很好的DSL用于定义导航,你可以完全控制突出显示,子菜单显示和使用的类和ID。

这是example of the DSL

答案 1 :(得分:0)

通常的做法是拥有一些 erb 文件,例如 shared / _nav.html.erb shared / _subnav.html.erb 原因如下:

  • 过早抽象不好
  • 不经常导航更改

Rails方式的意思是:

  • DRY
  • 配置约定
  • 模式设置,如MVC,委托,代理,观察者,STI等
  • 脂肪模型,瘦小的控制器
  • 人类可读编码标准
  • Unobtrusive JS

所以Rails没有涵盖特定的客户端表示事物,那么你可以这样做以使代码清晰简单。

我自己的观点是用JS构建导航更好,因为基于它更容易做移动标记