【问题标题】:How to Implement different HTML background images based on different controller methods?如何根据不同的控制器方法实现不同的HTML背景图片?
【发布时间】:2014-08-05 15:23:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用content_for 方法。 described here

    基本上,在您的布局中,您可能有

    <body class="<%= yield @body_class %>">
    

    那么在你看来你可以这样做

    <% content_for :body_class do 'class-name' end %>
    
    <!-- regular view HTML -->
    

    【讨论】:

      【解决方案2】:

      只需根据您的操作名称在您的元素上使用不同的类,然后在这些类上应用不同的背景图像

      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");
       }
      

      【讨论】:

      • 当您有多个具有相同操作名称的控制器时,您可能会在此处遇到问题。
      • @JustinLicata 仅当您为不同的控制器使用相同的布局时,rails 也有 controller_name 帮助器来区分它,以便处理它
      • 是的,添加 controller_name 会有所帮助。您的原始答案没有指定使用 controller_name 来帮助打击可能的重复,这就是我评论的原因。我在这里假设他对不同的控制器使用相同的布局。不过不用担心,我更喜欢这个答案而不是我的答案,因为我有冗余。
      • @JustinLicata 是的,我知道谢谢!我只是在更新我的答案:)
      【解决方案3】:

      你可以在元素上添加动态类名(应该有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);
      }
      

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

      【讨论】:

      • 来自 Erik、Mandeep 和 RAJ 的精彩回答。来自 RAJ 的这个答案看起来对我有用,因为所有 3 个答案都是类似的实现。谢谢,伙计们!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多