动态菜单源自rails中的DB

时间:2013-09-16 16:34:40

标签: ruby-on-rails ruby ruby-on-rails-3

我对Rails很新,想要为我正在编码的博客网站创建一个动态菜单。因此,它的想法是我可以创建一个包含帖子的新博客,而不必重新编码菜单栏,而是让菜单查看数据库并显示它拥有的所有博客。我认为这很简单,也许我使用错误的措辞或寻找错误的东西。哦,我应该说我还在使用rails 3.2.13。

目前我有以下代码:

blogs_controller.rb:

class BlogsController < ApplicationController
# GET /blogs
# GET /blogs.json
def index
@blogs = Blog.all

 respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @blogs }
 end
end
--other code--

然后在我的观点\ blogs \ index.html.erb:

<table>
  <tr>
    <th>Title</th>
    <th>Created Date</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @blogs.each do |blog| %>
  <tr>
    <td><%= blog.title %></td>
    <td><%= blog.created_at.localtime.strftime('%d %b %y %H:%M' ) %></td>
    <td><%= link_to 'Show', blog %></td>
    <td><%= link_to 'Edit', edit_blog_path(blog) %></td>
    <td><%= link_to 'Destroy', blog, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</table>

所有这些都可以很好地显示我的博客的索引,但我希望有一种方法可以在我的视图\ layouts \ _header.html.erb中包含以下内容:

<header>
  <ul class="menu center">
    <li><%= link_to root_path do %> Home <% end %></li>
    <li><%= link_to contact_path do %> Contact Me <% end %></li>
    <li><%= link_to blogs_path do %> Blogs <% end %>
    <ul>
    # hoping I could add below???
    <% @blogs.each do |blog| %>
        <li><%= blog.title %></li>
    <% end %>
    </ul>
 </ul>
</header>

任何帮助或提示都会很棒。

由于

1 个答案:

答案 0 :(得分:2)

可能性1:

你可以在application_controller.rb中添加一个before_filter,它为你的标题菜单设置@blogs变量。

class ApplicationController < ActionController::Base

  before_filter :set_blogs_for_menu

  private

  def set_blogs_for_menu
    @blogs = Blog.all
  end

end

现在@blogs始终可用于所有视图。

可能性2:

您可以在app / helpers / application_helper.rb

中创建帮助程序
module ApplicationHelper

  def create_blog_menu
    blogs = (defined? @blogs) ? @blogs : Blog.all

    menu = ""
    blogs.each do |blog|
      menu += "<li>#{blog.title}</li>"
    end
    raw menu
  end

end

app / view \ layouts \ _header.html.erb:

<header>
  <ul class="menu center">
    <li><%= link_to "Home", root_path %></li>
    <li><%= link_to "Contact", contact_path %></li>
    <li><%= link_to "Blog", blogs_path %>
      <ul>
        <%= create_blog_menu %>
      </ul>
    </li>
  <ul>
</header>

我更喜欢可能性1,但我想向您展示更多实现这一目标的方法。