在rails中如何使用if current_page检测子页面?

时间:2014-05-28 09:13:14

标签: ruby-on-rails ruby-on-rails-4

我使用current_page?检测当前页面和样式,链接方式如下:

<li class="snavitem <%= ' active' if current_page? countries_path %>">

现在,如果我们处于/countries,那么这会将活动类添加到链接中,这将使其不同。但是当我们在countries/newcountries/edit这样的子页面时,如何设置这样的链接样式?

3 个答案:

答案 0 :(得分:0)

在应用程序助手

中定义方法check_action
def check_action controller, action
  return true if controller.eql?("countries") and (action.includes?("index") or action.includes?("edit") or action.includes?("new"))
end

在视图中

<li class="snavitem <%= ' active' if check_action(controller, controller.action_name) %>">

答案 1 :(得分:0)

这样简单的方式是这样的:

current_page?(controller: 'countries')

countries/ #=> true
countries/anything-here #=> true

答案 2 :(得分:0)

您可以使用request.fullpath获取当前的完整路径

例如

<ul>
 <% Contry.all.each do |c| %>
  <li class="snavitem <%= is_active?(edit_contry_path(c)) %>">
    <%= link_to "edit " + c.name, edit_contry_path(c) %>
  </li>
 <% end %>
</ul>

application_helper.rb

def is_active?(link_path)
  "active" if request.fullpath == link_path
end

阅读request.fullpath here