1

这就是我所拥有的,我想将它包含在一个部分中,这样我就不会在 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>
4

3 回答 3

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_currentlink_to_unless

于 2012-12-27T07:48:05.473 回答
2

寻找 active_link_to gem https://github.com/twg/active_link_to 这是最简单的方法

于 2012-12-27T07:43:23.590 回答
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

于 2012-12-27T07:54:20.153 回答