1

我需要做的事情很简单,但一种优雅的方式让我逃避,因为我是 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="">

我想避免。

4

5 回答 5

0
<body <%= controller_name == 'index' ? "class='pull_top'" : '' %>>
于 2013-04-30T05:13:34.237 回答
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 将被调用两次

于 2013-04-30T11:39:12.100 回答
0

在我看来,最终结果是:

<body class="">

没什么大不了的。逻辑被封装在帮助程序中,您仍然可以向<body>标签添加其他类,这些类可以应用于您描述的两种场景。例如:

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

希望这可以帮助!

于 2013-04-30T05:35:46.637 回答
0

您可以在 application.html.erb 中添加以下内容:

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

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

provide(:body_class, 'whatever-you-want')
于 2013-04-30T07:43:50.897 回答
0

如果 body_class 存在而不是应用类,您可以放置​​ if 语句,否则您可以将其保留为:

<% if body_class.present? %>
  <body class="<%= body_class %>">
<% else %>
  <body>
<% end %>
于 2016-05-30T10:26:24.813 回答