我有一个简单的菜单,如下所示:
<ul class="menu">
<li class="active"><a href="<%= root_path %>">Home</a></li>
<li class=""><%= link_to 'Feeds' , feeds_path %></li>
<li class=""><%= link_to 'Accounts' , accounts_path %></li>
</ul>
“活跃”类是标记当前页面的样式。
我有两个问题:
1.如何“告诉”应用程序我在哪个页面并要求它“更改”课程?
2.有没有更好的方法来创建此菜单(可能由控制器或数据库表驱动)?
我意识到这是一个新手问题,但我已经考虑了几天了,已经阅读了一些教程,但没有一个真正点击。
感谢您的帮助。
答案 0 :(得分:1)
我最近在ApplicationHelper
:
def nav_links
items = [home_link, about_me_link, contact_link]
content_tag :ul, :class => "nav" do
items.collect { |item| concat item}
end
end
def home_link
nav_item_active_if(!@article || @article.type.nil?) do
link_to "Home", root_path
end
end
def about_me_link
nav_item_active_if(@article && @article.type == "About") do
link_to "About Me", article_path(About.first)
end
end
def contact_link
nav_item_active_if(@article && @article.type == "Contact") do
link_to "Contact", article_path(Contact.first)
end
end
def nav_item_active_if(condition, attributes = {}, &block)
if condition
attributes["class"] = "active"
end
content_tag(:li, attributes, &block)
end
在您的视图中,您只需致电:
<%= nav_links %>
你可以用它作为例子。
答案 1 :(得分:0)
我使用current_page?
方法设置我的活动链接。它以路径为参数。我创建了一个链接文本和路径的哈希,并迭代它打印链接。这样我只需要调用current_page?一次。
但是有些宝石可以帮到你。看看这些:https://www.ruby-toolbox.com/categories/rails_menu_builders
答案 2 :(得分:0)
不是一个完美的解决方案,但你可以做到以下几点。
创建3个变量:
@homeActive = ""
@feedsActive = ""
@accountsActive = ""
在您提供的代码中,将类设置为与名称对应的每个变量。
<li class=@homeActive><a href="<%= root_path %>">Home</a></li>
现在,在home方法下的控制器中,设置@homeActive = "active"
,将其他两个设置为“”。重复其他方法,这应该有效。
答案 3 :(得分:0)
我使用了一堆'if's和current_page?方法。 这很难看,但是如果有人更好地了解如何做到这一点,我会很乐意了解它。
if current_page? (root_path)
content_tag(:li , link_to('Home' , root_path), :class => "active")
else
content_tag(:li , link_to('Home' , root_path))
end