动态身份证

时间:2011-04-15 11:32:05

标签: ruby-on-rails ruby

如何在Rails中设置body标签的ID?

<body id="login">

7 个答案:

答案 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 %>">