У меня есть вспомогательный метод default_content_for, который можно использовать для предоставления содержимого по умолчанию для разделов yield. Однако, когда я использую его, я получаю странный вывод от помощника.
Я почти уверен, что, возможно, упускаю что-то простое, но все еще не уверен, что не так.
Заголовок заканчивается полным материалом выше начала блока. Вот так:
<title> Default Title<!DOCTYPE html> <html> <head> <title> Default Title </title>
application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>
<% default_content_for :title do %>
Default Title
<% end %>
</title>
<%= stylesheet_link_tag :all %>
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
</head>
<body>
<%= yield %>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>
<% default_content_for :title do %>
Default Title
<% end %>
</title>
<%= stylesheet_link_tag :all %>
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
</head>
<body>
<%= yield %>
</body>
</html>
вспомогательный метод
module ApplicationHelper
def default_content_for(name, &block)
name = name.kind_of?(Symbol) ? ":#{name}" : name
out = eval("yield #{name}", block.binding)
out = (out ? (out.empty? ? false : out): false) || capture(&block)
concat(out)
end
end
выход
<!DOCTYPE html>
<html><head>
<title> Default Title<!DOCTYPE html> <html> <head> <title> Survey Builder </title>
<script type="text/javascript" src="/javascripts/prototype.js?1314309079"></script>
<script type="text/javascript" src="/javascripts/effects.js?1314309079"></script>
<script type="text/javascript" src="/javascripts/dragdrop.js?1314309078"></script>
<script type="text/javascript" src="/javascripts/controls.js?1314309078"></script>
<script type="text/javascript" src="/javascripts/rails.js?1314309079"></script>
<script type="text/javascript" src="/javascripts/application.js?1314309078"></script>
<meta content="authenticity_token" name="csrf-param">
<meta content="oG4mVUt5wy6aWdhbxmXa3tYh3DUgXVUQy9d6uxng6a0=" name="csrf-token">
</head>
<body>
<div id="user_nav">
Logged in as KARL KIRCH
<a href="/log_out">Log out</a>
</div>
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
</body></html>