Pet*_*ong 110 navigation ruby-on-rails-3
我在导航菜单中有一些静态页面.我想在当前显示的项目中添加类似"当前"的类.
我这样做的方法是添加大量的辅助方法(每个项目一个)来检查控制器和操作.
def current_root_class
'class="current"' if controller_name == "homepage" && action_name == "index"
end
<ul>
<li <%= current_root_class %>><%= link_to "Home", root_path %>
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢??我目前的方式是如此愚蠢......
Ski*_*ick 287
我做了一个叫做帮手nav_link:
def nav_link(link_text, link_path)
class_name = current_page?(link_path) ? 'current' : ''
content_tag(:li, :class => class_name) do
link_to link_text, link_path
end
end
Run Code Online (Sandbox Code Playgroud)
用过:
nav_link 'Home', root_path
Run Code Online (Sandbox Code Playgroud)
这将生成HTML之类的
<li class="current"><a href="/">Home</a></li>
Run Code Online (Sandbox Code Playgroud)
jpe*_*thy 71
使用current_page?帮助程序确定是否应该分配"current"类.例如:
<%= 'active' if current_page?(home_about_path) %>
Run Code Online (Sandbox Code Playgroud)
注意,您也可以传递路径(不仅是选项的散列),例如:current_page?(root_path).
Yan*_*nis 56
这里不是真正的答案,因为我使用的方式和你一样.我刚刚定义了帮助方法来测试多个控制器或操作:
在application_helper.rb中
def controller?(*controller)
controller.include?(params[:controller])
end
def action?(*action)
action.include?(params[:action])
end
Run Code Online (Sandbox Code Playgroud)
然后你可以if controller?("homepage") && action?("index", "show")在你的视图或其他帮助方法中使用...
小智 26
我在application_helper.rb(Rails 3)中使用这个nav_link(文本,链接)函数来完成工作,并为我滚动我的bootstrap twitter 2.0导航栏链接.
def nav_link(text, link)
recognized = Rails.application.routes.recognize_path(link)
if recognized[:controller] == params[:controller] && recognized[:action] == params[:action]
content_tag(:li, :class => "active") do
link_to( text, link)
end
else
content_tag(:li) do
link_to( text, link)
end
end
end
Run Code Online (Sandbox Code Playgroud)
例:
<%=nav_link("About Us", about_path) %>
Run Code Online (Sandbox Code Playgroud)
ful*_*ked 10
我这样做的方法是在application_helper中添加一个辅助函数
def current_class?(test_path)
return 'current' if request.request_uri == test_path
''
end
Run Code Online (Sandbox Code Playgroud)
然后在导航中,
<%= link_to 'Home', root_path, :class => current_class?(root_path) %>
Run Code Online (Sandbox Code Playgroud)
这将测试针对当前页面uri的链接路径,并返回当前类或空字符串.
我没有对此进行过彻底的测试,而且我对RoR非常陌生(在PHP使用了十年之后),所以如果这有一个重大缺陷,我很乐意听到它.
至少这样你在每个链接中只需要1个辅助函数和一个简单的调用.
要建立@Skilldrick的答案......
如果您将此代码添加到application.js,它将确保具有活动子项的任何下拉菜单也将标记为活动...
$('.active').closest('li.dropdown').addClass('active');
Run Code Online (Sandbox Code Playgroud)
要回顾支持代码>添加一个名为nav_link的帮助器:
def nav_link_to(link_text, link_path)
class_name = current_page?(link_path) ? 'active' : ''
content_tag(:li, :class => class_name) do
link_to link_text, link_path
end
end
Run Code Online (Sandbox Code Playgroud)
用过:
nav_link_to 'Home', root_path
Run Code Online (Sandbox Code Playgroud)
这将生成HTML之类的
<li class="active"><a href="/">Home</a></li>
Run Code Online (Sandbox Code Playgroud)