如何基于不同的控制器方法实现不同的HTML背景图像?

时间:2014-08-05 15:23:32

标签: ruby-on-rails image methods background controller

使用Rails(4.1.4)和Ruby(2.1.2),基于不同控制器操作实现不同背景图像的最干燥方法是什么?我是否需要从/ app / views / layouts / application中移出HTML代码标签并将它们移动到单独的视图页面中,或者有更好的方法吗?

3 个答案:

答案 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);
}

就是这样......享受!!