실제 템플릿이 정의한 레이아웃 수준에서 조건부 렌더링을 수행하고 싶습니다.이 작업을 수행하는 content_for(:an__area)
방법은 무엇입니까?
답변
@content_for_whatever
더 이상 사용되지 않습니다. 다음 content_for?
과 같이 대신 사용하십시오 .
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
답변
도우미 메서드를 만드는 데 실제로 필요하지 않습니다.
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
물론 당신의 관점에서 :
<% content_for :sidebar do %>
...
<% end %>
나는 항상 이것을 사용하여 한 열과 두 열 레이아웃 사이를 조건부로 이동합니다.
답변
<%if content_for?(:content)%>
<%= yield(:content) %>
<%end%>
답변
도우미를 만들 수 있습니다.
def content_defined?(var)
content_var_name="@content_for_#{var}"
!instance_variable_get(content_var_name).nil?
end
레이아웃에서 이것을 사용하십시오.
<% if content_defined?(:an__area) %>
<h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
답변
Ok 나는 아무도 대답하지 않았고 이미 대답을 찾았 기 때문에 뻔뻔하게 자기 회신을 할 것입니다. 🙂 이것을 application_helper.rb 또는 편리하다고 생각되는 곳에서 도우미 메서드로 정의하십시오.
def content_defined?(symbol)
content_var_name="@content_for_" +
if symbol.kind_of? Symbol
symbol.to_s
elsif symbol.kind_of? String
symbol
else
raise "Parameter symbol must be string or symbol"
end
!instance_variable_get(content_var_name).nil?
end
답변
yield를 두 번 호출하는 것이 성능에 미치는 영향은 확실하지 않지만 yield의 내부 구현 (@content_for_xyz는 더 이상 사용되지 않음)에 관계없이 추가 코드 나 도우미 메서드없이 수행됩니다.
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>