Mat*_*ish 12 ruby templates ruby-on-rails actionview
我有一个Ruby/Rails应用程序,有两个或三个主要"部分".当用户访问该部分时,我希望显示一些子导航.所有三个部分都使用相同的布局,因此我无法"硬编码"导航到布局中.
我可以想到几种不同的方法来做到这一点.我想为了帮助人们投票,我会把它们作为答案.
还有其他想法吗?或者你投票给谁?
您可以使用partials轻松完成此操作,假设每个部分都有自己的控制器.
比方说,你有三个部分称为帖子,用户和管理员,每个都有它自己的控制器:PostsController,UsersController和AdminController.
在每个相应的views目录中,您声明一个_subnav.html.erb部分:
/app/views/users/_subnav.html.erb /app/views/posts/_subnav.html.erb /app/views/admin/_subnav.html.erb
在每个subnav部分中,您声明了特定于该部分的选项,因此/users/_subnav.html.erb可能包含:
<ul id="subnav">
<li><%= link_to 'All Users', users_path %></li>
<li><%= link_to 'New User', new_user_path %></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
虽然/posts/_subnav.html.erb可能包含:
<ul id="subnav">
<li><%= link_to 'All Posts', posts_path %></li>
<li><%= link_to 'New Post', new_post_path %></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
最后,一旦完成此操作,您只需要在布局中包含subnav partial:
<div id="header">...</div>
<%= render :partial => "subnav" %>
<div id="content"><%= yield %></div>
<div id="footer">...</div>
Run Code Online (Sandbox Code Playgroud)
至于你的子菜单的内容,你可以在每个控制器中以声明的方式进行.
class PostsController < ApplicationController
#...
protected
helper_method :menu_items
def menu_items
[
['Submenu 1', url_for(me)],
['Submenu 2', url_for(you)]
]
end
end
Run Code Online (Sandbox Code Playgroud)
现在,无论何时从视图中调用menu_items,您都可以使用正确的列表来迭代特定控制器.
这比使用逻辑放在视图模板中更清晰.
请注意,您可能还想在ApplicationController中声明一个默认(空?)menu_items.