【问题标题】:Rails way to generate site navigationRails 生成站点导航的方式
【发布时间】:2011-11-27 03:52:32
【问题描述】:

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

我问您如何创建一个用于在 Rails 方式中导航的列表,以及您是否可以帮助我开发我正在尝试的方法,如下所述...

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

应用助手:

               $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"},

                          }
           }


               }

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

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

top1 loc
  member1 loc
  member2 loc
top2 loc

虽然不知道在哪里统计:(

所以...用这些信息生成一个 HTML 列表对我来说似乎不是很麻烦... Rails 上的每个人都在做什么?

谢谢!

谢谢!

【问题讨论】:

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


    【解决方案1】:

    我的建议是考虑使用Simple Navigation Gem。这有一个很好的 DSL 用于定义导航,并且您可以完全控制突出显示、子菜单显示以及使用的类和 id。

    这是example of the DSL

    【讨论】:

      【解决方案2】:

      通常的做法是拥有几个 erb 文件,例如 shared/_nav.html.erbshared/_subnav.html.erb原因:

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

      什么是Rails方式,是:

      • 干燥
      • 约定优于配置
      • 模式集,如 MVC、Delegate、Proxy、Observer、STI 等
      • 胖模型,瘦控制器
      • 人类可读的编码标准
      • 不显眼的 JS

      所以 Rails 不涉及特定的客户端表示的东西,那么你可以这样做以使代码清晰和简单。

      我个人的意见还是用 JS 构建导航更好,因为基于它做移动标记更容易

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 2013-05-27
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        相关资源
        最近更新 更多