在Rails中根据当前视图/控制器更改类属性?

时间:2013-04-30 04:59:36

标签: ruby ruby-on-rails-3

我需要做的事情非常简单,但是一个优雅的方法就是逃避我,因为我是Rails的菜鸟。基本上,我需要根据当前显示的视图来更改body标签的class属性,该属性位于我的application.html.erb文件中。

因此,在我的索引页面上它将是:

<body class="pull_top">

但是在任何其他页面上(到目前为止),它只是

<body>

我的第一个想法是将此添加到application_helper.rb

  def body_class
    default_class = ""
    if current_page?(controller: 'index')
      default_class = "pull_top"
    end
    default_class
  end

然后做

<body class="<%= body_class %>">

但是除了索引之外的所有其他页面上我最终都会

<body class="">

我想避免。

5 个答案:

答案 0 :(得分:0)

<body <%= controller_name == 'index' ? "class='pull_top'" : '' %>>

答案 1 :(得分:0)

在我看来最终:

<body class="">

并不是什么大不了的事。逻辑被封装在帮助程序中,您仍然可以向<body>标记添加其他类,这些类可以应用于您描述的两个方案中。例如:

<body class="<%= body_class %> pretty_style another_style">

希望这有帮助!

答案 2 :(得分:0)

您可以在application.html.erb中输入以下内容:

<body class="<%= yield :body_class %>">
...
</body>

然后,在您的特定视图中,您确实需要一个类:

provide(:body_class, 'whatever-you-want')

答案 3 :(得分:0)

怎么样:

def body_class
  default_class = nil
  if current_page?(controller: 'index')
    default_class = "pull_top"
  end
  default_class
end

视图:

<body<%= " class=\"#{body_class}\"" if body_class %>>

这里的问题是body_class将被调用两次

答案 4 :(得分:0)

如果存在body_class而不是apply class,则可以使用if语句,否则可以将其保留为:

<% if body_class.present? %>
  <body class="<%= body_class %>">
<% else %>
  <body>
<% end %>