실제 템플릿이 정의한 레이아웃 수준에서 조건부 렌더링을 수행하고 싶습니다.이 작업을 수행하는 content_for(:an__area)
방법은 무엇입니까?
답변:
도우미를 만들 수 있습니다.
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
instance_variable_defined?(content_var_name)
은 0인지 아닌지 테스트하는 것보다 약간 깔끔합니다. 솔루션 미래 증명되지 않도록 두 번째로 큰 포인트는 content_for 인스턴스 변수가되지 않습니다