我对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>
任何帮助或提示都会很棒。
由于
答案 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,但我想向您展示更多实现这一目标的方法。