使用Rails(4.1.4)和Ruby(2.1.2),基于不同控制器操作实现不同背景图像的最干燥方法是什么?我是否需要从/ app / views / layouts / application中移出HTML代码标签并将它们移动到单独的视图页面中,或者有更好的方法吗?
答案 0 :(得分:1)
您可以使用content_for
方法。 described here
基本上,在你的布局中你可能有
<body class="<%= yield @body_class %>">
然后在你的观点中你可以做到
<% content_for :body_class do 'class-name' end %>
<!-- regular view HTML -->
答案 1 :(得分:1)
根据您的操作名称在元素上使用不同的类,然后在这些类上应用不同的背景图片
Rails有 controller_name和action_name助手来获取您的控制器名称和操作名称,以便您可以这样做:
<div class="<%= 'class_name' if action_name == 'show' %>">
</div>
如果您想使用与控制器操作相同的类名,那么您可以
<div class="<%= action_name %>">
</div>
如果您对不同的控制器使用相同的布局,那么您可以使用rails controller_name和action_name来创建一个唯一的类,类似于:
<div class="<%= controller_name action_name %>">
</div>
然后相应地使用css,让我们说你有家庭控制器和新的和显示动作然后你可以做
.home.show{
background: image-url("pic1.png");
}
.home.new{
background: image-url("pic2.png");
}
答案 2 :(得分:0)
您可以在元素上添加动态类名(应该有bg img)
# your '.html.erb' template
<body class="<%=controller_name%>-<%=action_name%>">
...
</body>
# your css file
// for user_controller's 'new' action
body.user-new {
background-image: url(http://cdn.topshelfcomix.com/catalog/covers/any_empire_cover_sm_lg.jpg);
}
// for profiles_controller's 'show' action
body.profile-show {
background-image: url(http://mrzine.monthlyreview.org/2011/images/latuff_egypt_by_any_means_necessary_a.gif);
}
就是这样......享受!!