我的应用程序布局中有一个菜单 说
<ul>
<li><a href="index.asp">Home</a></li>
<li><a href="dashboard.asp">Dashboard</a></li>
<li><a class="active" href="/people">People</a></li>
</ul>
现在我想从不同的页面更改不同锚点的类...对于主页来说它会像...
<ul>
<li><a class="active" href="index.asp">Home</a></li>
<li><a href="dashboard.asp">Dashboard</a></li>
<li><a href="/people">People</a></li>
</ul>
如何实现这一目标?顺便说一下,我是ror的新手。
答案 0 :(得分:1)
这可以按照以下方式完成。
编写一个帮助器方法来执行此操作(辅助方法用于为演示文稿布局执行一些简单的函数,这是一个理想的情况)。
在Rails中,您可以将当前正在执行的控制器名称作为
params[:controller]
并以
执行操作params[:action]
因此,在您的应用程序助手中,您可以编写类似
的内容module ApplicationHelper
def active_link (link)
(link == params[:controller]) ? "active" : ""
end
end
在上面的示例中,如果当前控制器与当前链接匹配,则它将返回一个字符串为“active”,否则返回一个空字符串
最后在您看来,
<ul>
<li><a class="<%= active_link('home') %>" href="index.asp">Home</a></li>
<li><a href="<%= active_link('dashbord') %>">Dashboard</a></li>
<li><a href="<%= active_link('people') %>">People</a></li>
</ul>
备注
答案 1 :(得分:0)
执行此操作的一种方法是从控制器传递实例变量。例如,如果您被发送到主页:
class Pages < ApplicationController
def index
@active = "index"
end
end
现在,当您进入导航视图时,您会执行以下操作:
<li><a class="<%= "active" if @active == "index" %>" href="index.asp">Home</a></li>
答案 2 :(得分:0)
对于它的价值,你也可以覆盖link_to
:
def link_to(*args, &block)
options_key, html_key = block_given? ? [0, 1] : [1, 2]
args[html_key] ||= {}
args[html_key][:class] = [args[html_key][:class], "active"].compact.join(' ') if current_page?(args[options_key])
super(*args, &block)
end
你可以像这样使用它:
<ul>
<li><%= link_to "Home", "index.asp" %></li>
<li><%= link_to "Dashboard", "dashboard.asp" %></li>
<li><%= link_to "People", "/people" %></li>
</ul>
答案 3 :(得分:0)
有一个link_to_unless_current
帮助器可以满足您的需求,但并不总是如预期的那样 - 它忽略了查询参数。但是,如果所有链接指向不同的操作/控制器,那应该这样做。