11

我看过这个截屏视频,在视图中添加页面标题,有没有办法我可以做同样的事情,但在 body 标签中添加一个类?

4

6 回答 6

42

不知道你的意思,你可以这样做:

在一个视图中:

<% content_for :body_class, "my_class" %>

在布局文件中:

<body class="<%= yield (:body_class) %>">
于 2012-12-21T19:29:04.423 回答
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) %>">
于 2013-06-11T16:28:16.443 回答
4

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

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

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

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

于 2013-12-31T12:36:01.107 回答
1

在布局页面中:

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

在内容页面中:

<% content_for :body_class do  'my-body-class' end %>
于 2016-08-01T09:40:38.683 回答
0

我在我的应用程序中使用了接受的方法有一段时间了,但从来没有真正喜欢它的工作方式,因为如果没有类,你的身体标签上就会有那个 class='',乱扔你的代码。对于我当前的用例,我只想要一个宽屏类(但您可以根据您的用例轻松获得更高级的不同类)。我对这种方法很满意:

在您的应用程序助手中:

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

然后,如果您想将它用于“宽屏”以外的不同类,请随意使类逻辑更高级 - 但关键是这是一种优雅的方式,如果您不指定一个类,则允许没有类, 没有

<body class>

显示在您的 html 中。

于 2016-11-17T11:13:35.937 回答
0

我更喜欢使用以下方法:

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

That method avoids the dreaded <body class>.

I frequently use the controller name to scope a number of styles so it's nice to not need to supply a content_for on every view if I only needed that one class.

于 2017-09-02T01:03:54.987 回答