use*_*963 2 ruby-on-rails ruby-on-rails-4
我的application.html.erb文件看起来像这样
<!DOCTYPE html>
<html lang="en">
<head>
.
.
.
</head>
<body <%= "class=landing-bg" if !@landing.nil? %>>
<%= render 'layouts/header' %>
<div class="container">
.
.
.
</div>
<%= render 'layouts/footer' %>
<% if !@landing.nil? %>
<div class="landing-gradient"></div>
<% end %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我遗漏了一大堆meta标签,<head>还有一堆与该问题无关的正文中的其他代码.
static_pages_controller
def home
@landing = "landing"
end
Run Code Online (Sandbox Code Playgroud)
我需要<body>在我的主页上添加一个类和页脚下方的div.我觉得我在做什么有点hacky.而且,如果我为登陆页面创建了一个单独的布局,那么它就不会是DRY,因为我会重复这个布局上的很多代码.
做这个的最好方式是什么?什么是铁轨方式?
我的典型模式是将控制器和动作添加到正文的类中,然后在我的css中使用它们作为选择器,如下所示:
<body class="<%= controller_name %> <%= action_name %>">
<!-- etc -->
</body>
Run Code Online (Sandbox Code Playgroud)
至于你的第二期有条件正文仅在主页上,你可以简单地将它添加到主布局中的正文中,并仅在着陆页上显示它:
<body class="<%= controller_name %> <%= action_name %>">
<!-- etc -->
<div class="landing-gradient"></div>
</body>
# application.css
.landing-gradient {
display: none; // Hide the gradient
}
.landing .landing-gradient {
display: inline; // Show gradient b/c of more specific selector
}
Run Code Online (Sandbox Code Playgroud)
这是我个人的偏好,因为您将单个元素的显示留给css /表示层而不是控制器中.
最后,您还可以使用content_for页脚周围的内容,以便您可以跨页面自定义页脚.虽然这对你的例子来说有点沉重,所以我只会在你自定义页脚时使用它.