0

我对 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--

然后在我的意见\博客\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>

所有这些都可以很好地显示我的博客的索引,但我希望有一种方法可以在我的视图\布局\_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>

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

谢谢

4

1 回答 1

2

可能性一:

您可以在 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

应用程序/视图\布局\ _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,但我想向您展示更多实现这一点的方法。

于 2013-09-16T16:47:51.490 回答