Programing

rails는 yield : area가 content_for에 정의되어 있는지 확인합니다.

lottogame 2020. 9. 2. 20:25
반응형

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

반응형