【问题标题】:What is the best way to add a css class to a certain controller in Rails?在 Rails 中将 css 类添加到某个控制器的最佳方法是什么?
【发布时间】:2020-10-17 01:07:43
【问题描述】:

我的目标很简单,我只想知道如何做到这一点的最佳方法。

场景

book_controller

def new
  @book = "book"
end

杂志控制器

def new
  @magazine = "magazine"
end

HTML

application.html.erb

<body>
  <div class="container">
     <body of controller>
  </div>
</body>

books/new.html.erb

<h1>hello book</h1>

杂志/new.html.erb

<h1>hello magazine</h1>

css

.background-black {
    background: black
}

例如,我的目标是将 background-black CSS 类添加到唯一的 book_controller

 <div class="container background-black">

但它也会影响magazine_controller。如果我有 4 个需要黑色背景的控制器而其余的不需要那个类怎么办。最好的方法是什么?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    实现目标的最佳方法是使用 Rails 资产管道文档中推荐的Controller Specific Assets(您可以找到一些实现细节here),但正如您所说,您想做的事情很简单,所以您可以简单地使用 erb 语法通过调用名为 controller 的变量来动态控制类属性的值,该变量由 rails 填充并包含有关呈现视图的控制器的信息,例如控制器的名称。

    <div class="container <%= controller.controller_name == 'book' ? 'background-black' : '' %>">
    

    如果您有 4 个需要黑色背景的控制器,您也可以使用 erb。

     <div class="container <%= ['book','magazine','user', 'newspaper'].grep(/#{controller.controller_name}/).empty? ? '' : 'background-black' %>">
    

    here 提到的答案使用相同的方法,但具有帮助您保持 css 代码清洁和可读性的优势。
    希望对您有所帮助

    【讨论】:

      【解决方案2】:

      首先,你应该删除一些//= require_tree in application.css的代码,

      然后 &lt;% self_css_path = "/assets/"+controller.controller_name %&gt; &lt;%= stylesheet_link_tag self_css_path, :media =&gt; "all" %&gt;在application.html.erb中

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多