Tanımlanan gerçek şablona göre düzen düzeyinde bir koşullu oluşturma yapmak istiyorum, bunun content_for(:an__area)
nasıl yapılacağına dair bir fikriniz var mı?
Tanımlanan gerçek şablona göre düzen düzeyinde bir koşullu oluşturma yapmak istiyorum, bunun content_for(:an__area)
nasıl yapılacağına dair bir fikriniz var mı?
Yanıtlar:
@content_for_whatever
kullanımdan kaldırıldı. content_for?
Bunun yerine şu şekilde kullanın :
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
content_for?
yalnızca Rails 3'te bulunur. Rails 2'de @content_for_...
örnek değişkenini kullanabilirsiniz .
yardımcı bir yöntem oluşturmak için gerçekten gerekli değildir:
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
o zaman elbette size göre:
<% content_for :sidebar do %>
...
<% end %>
Bunu her zaman bir sütun ve iki sütun düzeni arasında koşullu olarak gitmek için kullanıyorum
Yardımcı oluşturabilir:
def content_defined?(var)
content_var_name="@content_for_#{var}"
!instance_variable_get(content_var_name).nil?
end
Ve bunu düzeninizde kullanın:
<% if content_defined?(:an__area) %>
<h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
Tamam, hiç kimse cevap vermediği ve cevabı zaten bulduğum için utanmadan kendi kendine cevap vereceğim :) Bunu application_helper.rb'de veya uygun bulduğunuz herhangi bir yerde yardımcı bir yöntem olarak tanımlayın.
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)
sıfır olup olmadığını test etmekten biraz daha temiz. İkinci önemli nokta, content_for örnek değişkeni kullanımdan kaldırıldı, bu nedenle çözümünüz geleceğe uygun değil
Getiriyi iki kez çağırmanın performans sonuçlarından emin değilim, ancak bu, verimin dahili uygulamasından (@content_for_xyz kullanımdan kaldırılmıştır) ve herhangi bir ekstra kod veya yardımcı yöntem olmadan yapılacaktır:
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>