반응형
rails는 yield : area가 content_for에 정의되어 있는지 확인합니다.
실제 템플릿이 정의한 레이아웃 수준에서 조건부 렌더링을 수행하고 싶습니다.이 작업을 수행하는 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 %>
참고 URL : https://stackoverflow.com/questions/193838/rails-check-if-yield-area-is-defined-in-content-for
반응형
'Programing' 카테고리의 다른 글
Python의 파일 경로에서 폴더 경로를 어떻게 추출 할 수 있습니까? (0) | 2020.09.02 |
---|---|
Composer PHP 요구 사항 건너 뛰기 (0) | 2020.09.02 |
디렉터리 구조를 복사하지만 특정 파일 만 포함하는 방법 (Windows 배치 파일 사용) (0) | 2020.09.02 |
Swift의 Codable을 사용하여 사전으로 인코딩하려면 어떻게해야합니까? (0) | 2020.09.02 |
리플렉션을 사용하여 C #에서 기본 생성자없이 유형의 인스턴스 만들기 (0) | 2020.09.02 |