【问题标题】:Body class for controller in Rails appRails 应用程序中控制器的主体类
【发布时间】:2011-06-01 03:15:31
【问题描述】:

目前我的布局中有这个:

<body class="<%= controller.controller_name %>">

我想添加一个额外的类,该类对于设置它的任何控制器中的所有操作都是相同的,例如:

class SomeController < ApplicationController

body_class 'page'

...

end


class AnotherController < ApplicationController

body_class 'page'

...

end

这将导致:

<body class="some page">

<body class="another page">

实现这一目标的最简单方法是什么?我可以为此使用控制器类变量吗?

【问题讨论】:

    标签: ruby-on-rails helpers


    【解决方案1】:

    停下!停止! 使用这种模式:

    <body data-controller="#{controller.controller_path}" data-action="#{controller.action_name}">
    

    整洁!哈?

    然后在您的 document.ready 中为该控制器-动作组合触发您想要的任何 JS 脚本...(这可以在文档就绪时自动执行)

    所有功劳归于:http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution

    和:

    http://blog.jerodsanto.net/2012/02/a-simple-pattern-to-namespace-and-selectively-execute-certain-bits-of-javascript-depending-on-which-rails-controller-and-action-are-active/

    【讨论】:

    • 您忘记转义 ruby​​ 代码:&lt;body data-controller="&lt;%= controller.controller_path %&gt;" data-action="&lt;%= controller.action_name %&gt;"&gt;
    【解决方案2】:

    我的解决方案:

    控制器:

    class SomeController < ApplicationController
    
      before_filter lambda { @body_class = 'page' }
    
    ...
    
    end
    

    布局:

    <body class="<%= "#{controller.controller_name} #{@body_class}".strip %>">
    

    【讨论】:

      【解决方案3】:

      首先想到的是该控制器的布局。想到的第二件事是检查 url 并应用返回适当 HTML 的助手。

      class YourController < ApplicationController
      layout "new_layout"
       #...
      end
      

      【讨论】:

        【解决方案4】:

        我使用了@vincent 的方式。由于我使用的是 Rails 5.2.0,before_filter 已被弃用,并已替换为 before_action。我做了一点改动。

        控制器:

        class SomeController < ApplicationController
            before_action do 
                @body_class = 'page'
            end
        
            ...
        
        end
        

        布局:

        <body class="<%= "#{controller.controller_name} #{@body_class}".strip %>">
        

        【讨论】:

          【解决方案5】:
          <body role="document" class="<%= controller.controller_path %> <%= controller.action_name %>" data-controller="<%= controller.controller_path %>" data-action="<%= controller.action_name %>
          

          【讨论】:

          • 请不要转储代码。解释一下你做了什么。
          猜你喜欢
          • 2012-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多