我在视图中看过this screencast添加页面标题,有没有办法可以同样添加一个类的body标签?
答案 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 %>">
我发现这更简单,更优雅,但当然你将无法分配单独的类名。
答案 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是很好的。