在视图中使用ERB将类添加到正文 - Rails

时间:2012-12-21 19:19:23

标签: ruby-on-rails ruby erb

我在视图中看过this screencast添加页面标题,有没有办法可以同样添加一个类的body标签?

6 个答案:

答案 0 :(得分:39)

不确定您的意思,您可以采用相同的方式:

在视图中:

<% content_for :body_class, "my_class" %>

在布局文件中:

<body class="<%= yield (:body_class) %>">

答案 1 :(得分:5)

我通常会为这样的东西制作一个帮助方法,这样你就可以设置干净的默认值

application_helper.rb
  def body_class(class_name="default_class")
    content_for :body_class, class_name
  end


view:
  <% body_class "foo" %>

application.html.erb
  <body class="<%= yield (:body_class) %>">

答案 2 :(得分:3)

有时使用当前控制器名称作为类名,我们会这样做:

<body class="<%= controller.controller_name %>">

我发现这更简单,更优雅,但当然你将无法分配单独的类名。

秒。 Add Class To Body Using ERB In A View - Rails

答案 3 :(得分:1)

在布局页面中:

<% if content_for?(:body_class) %>
  <body class="<%= content_for(:body_class) %>" >
<% else %>
 <body>
<% end %>

在内容页面中:

<% content_for :body_class do  'my-body-class' end %>

答案 4 :(得分:0)

我已经在我的应用程序中使用了已接受的方法一段时间,但从未真正喜欢它是如何工作的,因为如果没有课程,那么你将会有这样的课程=&#39; &#39;在你的身体标签上,乱扔你的代码。对于我目前的用例,我只想要一个宽屏类(但根据您的使用情况,您可以轻松地获得更高级的不同类)。我很满意这种做法:

在您的应用程序助手中:

def body_tag(&block)
  content = capture(&block)
  content_tag(:body, content, class: @widescreen ? "widescreen" : nil)
end

在application.html.erb

<%= body_tag do %>
  <%# the rest of your content here %>
<% end %>

然后在您的应用程序控制器中:

private
  def enable_widescreen
    @widescreen = true
  end

然后在你想要的任何控制器中,只需执行:

before_action :enable_widescreen

如果你想将它用于不同的类以及宽屏&#39;那么随意让类逻辑更高级。 - 但重点是,这是一种优雅的方式,如果你没有指定一个课程就不允许有课程,没有

<body class>

显示在你的HTML中。

答案 5 :(得分:0)

我更喜欢使用以下方法:

<body class="<%= content_for?(:body_class) ? yield(:body_class) : controller_name %>">

该方法避免了可怕的<body class>

我经常使用控制器名称来定义一些样式,所以如果我只需要那个类,那么不需要在每个视图上提供content_for是很好的。