许多Rails视图的内容略有不同 - 如何干

时间:2013-05-22 06:53:50

标签: ruby-on-rails ruby-on-rails-3

希望我没有重复一个问题。它与this onethis one类似,但不完全相同。

关于重复的问题,这是我的问题。我是Rails的新手。

我有一个(Twitter Bootstrap)一组药片/标签,如果用户在与该标签相关联的页面上,我希望<li>类设置为"active"。到目前为止,我这样做是一种愚蠢的方式..在我的每个观点中,我都有这个(简化):

<% content_for :pills do %>
  <li><a href="/">Home</a></li>
  <li class="active"><a href="/about">About</a></li> <----------- active class
  <li><a href="/contact">Contact</a></li>
<% end %>

并且在每个视图中我都有相同的代码(doh)但是在另一个tab / pill上将类设置为"active"

大多数标签内容来自同一个app/views/<some view directory>/,但有一个标签来自app/views/<some OTHER view directory>/,但我想这不是问题。

如何在不重复每个视图中的相似代码的情况下解决此问题?

非常感谢。

1 个答案:

答案 0 :(得分:1)

我实际上碰到了同样的事情并且创建了一个我在一些项目中使用的帮助器。

将其添加到app/helpers/layout_helper.rb文件中。

module LayoutHelper
  def nav_class_for(*controllers)
    :active if controllers.any? do |controller|
      controller_name.to_sym == controller.to_sym || params["#{controller.to_s.singularize}_id"]
    end
  end
end

然后我就这样使用它。

<li class="<%= nav_class_for(:about) %>"><a href="/about">About</a></li>

只需传递您希望菜单项处于活动状态的控制器的名称。对于那些控制器下面的任何嵌套路由,它也应该是活动的。