如何在Rails中设置body标签的ID?
<body id="login">
答案 0 :(得分:25)
我没有发现任何特别优雅或灵活的解决方案。将body_class
方法添加到 application_helper.rb :
def body_class
[controller_name, action_name].join('-')
end
..布局:
<body class="<%= body_class %>">
#e.g output: <body class="articles-show">
然后,您可以优化上面的帮助程序以动态注入其他标识符,例如模块。
答案 1 :(得分:5)
你应该在这里使用content_for标签。
在您的应用程序布局中:
<html>
...
<%= yield :body || "<body>" %>
...
</body>
</html>
然后从任何视图中你都可以这样称呼:
<% content_for :body do %>
<body id='login'>
<% end %>
就是这样:))
答案 2 :(得分:3)
您可以在控件或视图中的操作中设置变量@body_id,然后在布局中使用它。
例如,如果您有索引操作,则可以在控制器中添加此代码:
def index
@body_id = "myid"
end
或在您的视图中将index.html.erb as:
<% @body_id = "myid" %>
然后在你的布局中,我想你可以添加application.html.erb:
<body<%= " id=#{@body_id}" if @body_id %>> # no quotes around #{} are needed ;)
答案 3 :(得分:2)
小心!以下内容不适用于rails 3.1
<%= yield :body || "<body>" %>
它可能看起来有效但如果您查看来源,您会注意到您的身体标签丢失,除非您覆盖它。大多数浏览器都会解决丢失的正文标记。
正确的做法如下
<%= content_for?(:body) ? yield(:body) : raw("<body>") %>
答案 4 :(得分:2)
请注意,您不应该在控制器中设置视图数据,因为上面的一些帖子已经推荐了。它破坏了MVC模式,并创建了不必在除页面的HTML版本之外的任何地方使用的不必要的对象。
另一件需要注意的事情是,当您在逻辑块中分配您的身体标签时风险会增加 - 如果您不需要,为什么风险页面不会输出您的身体标签(打破页面)?上面的例子:
<%= yield :body || "<body>" %>
有些人可能并不完全理解你在孩子身上的含义,而你只是增加了身体标签的重复,这意味着如果有人没有终止标签等,你有更多的地方可以看。没有必要这种风险。一个更明智的解决方案是仅仅提供课程。 HAML允许您提供可选的类元素,例如:
%body{ id: yield(:body_id), class: yield(:body_class) }
然后在视图中设置这些值:
- content_for(:body_class) { 'dashboard business' }
我喜欢一种解决方案,它允许多个部分将类添加到一个yield块中,但是还没有找到一种非hacky方法来实现这一点。
答案 5 :(得分:0)
<body id="<%= @bodyid %>">
在您的控制器中,您可以设置此
@bodyid = "login"
答案 6 :(得分:-1)
你并没有真正解释你到底需要做什么,我的第一个猜测是:
<body id="<%= @body_id %>">