Rails应用程序中控制器的Body类

Vin*_*ent 4 ruby-on-rails helpers

目前我的布局中有这个:

<body class="<%= controller.controller_name %>">
Run Code Online (Sandbox Code Playgroud)

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

class SomeController < ApplicationController

body_class 'page'

...

end


class AnotherController < ApplicationController

body_class 'page'

...

end
Run Code Online (Sandbox Code Playgroud)

这将导致:

<body class="some page">

<body class="another page">
Run Code Online (Sandbox Code Playgroud)

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

lui*_*7up 12

停止!停止!使用此模式:

<body data-controller="#{controller.controller_path}" data-action="#{controller.action_name}">
Run Code Online (Sandbox Code Playgroud)

整齐!哈?

然后在你的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-动作是活性/


Vin*_*ent 6

我的解决方案

控制器:

class SomeController < ApplicationController

  before_filter lambda { @body_class = 'page' }

...

end
Run Code Online (Sandbox Code Playgroud)

布局:

<body class="<%= "#{controller.controller_name} #{@body_class}".strip %>">
Run Code Online (Sandbox Code Playgroud)