我有一个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
可能包含:
虽然/posts/_subnav.html.erb
可能包含:
最后,一旦完成此操作,您只需要在布局中包含subnav partial:
...<%= render :partial => "subnav" %><%= yield %>...
部分渲染.这与helper方法非常相似,除了布局可能有一些if语句,或者将其传递给helper ...
至于你的子菜单的内容,你可以在每个控制器中以声明的方式进行.
class PostsController < ApplicationController #... protected helper_method :menu_items def menu_items [ ['Submenu 1', url_for(me)], ['Submenu 2', url_for(you)] ] end end
现在,无论何时从视图中调用menu_items,您都可以使用正确的列表来迭代特定控制器.
这比使用逻辑放在视图模板中更清晰.
请注意,您可能还想在ApplicationController中声明一个默认(空?)menu_items.