这就是我所拥有的,我希望将其包含在一个部分中,以便我不会在4个地方重复它。问题是活动类应该根据用户所在的页面进行更改。我怎么能这样做?或者我最好只重复4个模板中的代码?
<div class="navbox">
<ul class="nav">
<a href="#" class="active"> Account</li></a>
<a href="#"><li> Profile</li></a>
<a href="#"><li> Photos</li></a>
<a href="#"><li> Security</li></a>
</ul>
</div>
答案 0 :(得分:3)
渲染时传入active
本地:
render :partial => 'navbox', :locals => { :active => 'Account' }
然后将此作为你的部分:
<div class="navbox">
<ul class="nav">
<a href="#"<% if active == 'Account' %> class="active"<% end %>> Account</li></a>
<a href="#"<% if active == 'Profile' %> class="active"<% end %>><li> Profile</li></a>
<a href="#"<% if active == 'Photos' %> class="active"<% end %>><li> Photos</li></a>
<a href="#"<% if active == 'Security' %> class="active"<% end %>><li> Security</li></a>
</ul>
</div>
有各种方法可以清理(link_to
,辅助方法等),这是一个练习。如果您可以从请求URL中推断某些内容是“活动的”,您还可以避免需要传入本地。
另请查看link_to_unless_current
&amp; link_to_unless
如果您根本不想链接,而不是在链接中添加类。
答案 1 :(得分:2)
寻找active_link_to gem https://github.com/twg/active_link_to 这是最简单的方法
答案 2 :(得分:2)
你可以尝试这样克里特的帮手:
{'Account' => account_path, 'Profile' => profile_path...etc}.each do |name, path|
content_tag :li do
link_to name, path, class: (current_page?(path) 'active' : 'regular')
end
end
另请参阅方法link_to_unless_current
http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_unless_current