在Rails 3中添加菜单

时间:2014-02-09 11:02:02

标签: ruby-on-rails-3 layout

这里有点问题。我试图在所有页面添加菜单。原因是编辑更新所有网页的单个文件非常容易。

在我的layouts / application.html.erb中,我有这个,在body标签之间:

<% content_for :menu do %>
<ul>
<li> page 1 </li>
<li> page 2 </li>
</ul>
<% end %>
<%= yield %>

在我的欢迎/索引中,我有:

<div id="menu">
<%= yield :menu%>
</div>

<h1>Welcome to my index page!</h1>

不确定是否需要所有这些,所以当我转到root时,我只看到welcome / index文件中的内容而不是链接。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

它应该是另一种方式,这意味着您可以在应用程序布局中调用:yield并在content_for文件中使用index

实际上content_for标签的想法是允许不同页面略有不同的变体,但仍然从布局调用相同的名称。从here

了解有关content_for的更多信息

我认为,在您的情况下,您需要的是布局中的部分内容,甚至您可以在布局中使用菜单。由于每个页面的布局都是可见的,因此每个页面都有可用的菜单,如果以后需要修改,仍然只需要更改一页

1 - 作为部分

#app/views/layouts/_menu.html.erb
<ul>
 <li> page 1 </li> 
 <li> page 2 </li>
</ul>

#app/views/layouts/application.html.erb
<%= render partial: 'menu' %>
<%= yield %>

2 - 将所有文件放在同一个文件中

#app/views/layouts/application.html.erb
<ul>
 <li> page 1 </li> 
 <li> page 2 </li>
</ul>
<%= yield %>

答案 1 :(得分:0)

您的application.html文件中应该有<%= yield :menu%>。 您还可以创建一个文件夹(让它命名为“共享”),您可以在其中获得菜单,消息等。 然后你可以试试这样的东西

#welcome/index.html.erb
<div class="content">
 Your Index Content here.
</div>


#layouts/application.html.erb
<%= yield :menu %>
<%= yield %>

#shared/menu.html.erb
<% content_for :menu do %>
<div id="menu">
  <ul>
    <li> page 1 </li> 
    <li> page 2 </li>
  </ul>
</div>
<% end %>