항복 섹션의 기본 내용을 제공하는 데 사용할 수있는 도우미 메서드 'default_content_for'가 있습니다. 그러나 내가 그것을 사용할 때, 나는 도우미로부터 이상한 출력을 얻는다.레일스 이상한 캡처 블록 오류
나는 아마 내가 무언가를 놓치고있는 것이 확실하지만, 무엇이 잘못되었는지 확신 할 수 없다.
제목이 블록 시작 부분 위에 가득 찼습니다. 그래서 같이 :
<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>
당신이 사용하고있는 content_for (: title)은 네임 심볼을 평가하여 메소드가 참조하는 곳입니다. 또한, 특히 중첩 된 테 네리 택은 시간이 지남에 따라 읽기가 까다로울 수 있습니다. 적절한 if 문을 사용하여보다 장기적인 사용이 가능합니다. 또는 out = false가 필요 없다면 다음을 수행하십시오 :'out || = capture (& block) ' – agmcleod
내 도우미 방법을 고쳤습니다, 내 대답을보십시오. – joekarl