2

我需要给我的正文标签一个特定于页面的 id,以更好地定位 css 选择器。

为此,我在 application.erb 布局中设置了以下内容:

<body id="<%= content_for :page_id %>">

在页面视图中,我可以这样做:

<% content_for :page_id do %>
  <%='some-page-id'%>
<% end %>

问题是我在返回值周围返回了额外的空格,导致渲染的正文标记看起来像这样:

<body id="    some-page-id " >

这会阻止 id 工作。我有一个解决方法:

<% body_id = content_for :page_id %>
<body id="<%= body_id.strip %>">

但是有没有办法解决这个问题,以便 content_for 在没有额外空格的情况下返回它的值?是什么导致这个额外的空白被返回?

4

5 回答 5

8

不要使用额外的 ERB 分隔符来设置内容

<% content_for(:page_id) { "thepageid" } %>

您可以更进一步并定义一个辅助方法

# in app/helpers/application_helper.rb
def page_id(page_id)
  content_for(:page) { page_id }
end

# in your template
<% page_id("thepageid") %>
于 2012-06-06T15:49:03.937 回答
4

是什么导致这个额外的空白被返回?

空间

<% content_for :page_id do %>
  <%='some-page-id'%>
<% end %>

你可以试试这个:

<%- content_for :page_id do -%>
  <%='some-page-id'%>
<%- end -%>
于 2012-06-06T15:02:06.163 回答
3

你总是可以使它成为一个单线:

<body id="<%= content_for(:page_id).strip %>">
于 2012-06-06T15:05:09.310 回答
0

这是 Rails 的正常行为,我建议你在 content_for 中添加“id=”

<body "<%= content_for :page_id %>">

<% content_for :page_id do %>
  <%='id="some-page-id"' %>
<% end %>
于 2012-06-06T15:04:22.623 回答
0

@OscarDelBen 是正确的:

这是有效的:

<% content_for :page_id do %><%='some-page-id'%><% end %>
于 2012-06-06T15:09:33.940 回答