मैं लेआउट स्तर पर एक सशर्त प्रतिपादन करना चाहता हूं जो वास्तविक टेम्पलेट के आधार पर परिभाषित किया गया है content_for(:an__area)
, किसी भी विचार को यह कैसे किया जाए?
मैं लेआउट स्तर पर एक सशर्त प्रतिपादन करना चाहता हूं जो वास्तविक टेम्पलेट के आधार पर परिभाषित किया गया है content_for(:an__area)
, किसी भी विचार को यह कैसे किया जाए?
जवाबों:
@content_for_whatever
पदावनत किया गया है। उपयोगcontent_for?
इसके बजाय , जैसे:
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
content_for?
केवल रेल 3 में मौजूद है। रेल 2 में आप @content_for_...
उदाहरण चर का उपयोग कर सकते हैं ।
सहायक विधि बनाने के लिए वास्तव में आवश्यक नहीं:
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
तब आपके विचार में:
<% content_for :sidebar do %>
...
<% 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 %>
ठीक है, मैं बेशर्मी से कर रहा हूं कि कोई भी जवाब नहीं दे रहा है और मैंने पहले ही जवाब पा लिया है :) इसे एक सहायक विधि के रूप में परिभाषित करें जैसे कि 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)
परीक्षण के बजाय थोड़ा शून्य है कि क्या यह शून्य है। दूसरा बड़ा बिंदु, content_for उदाहरण चर को पदावनत किया जाता है, इसलिए आपका समाधान भविष्य का प्रमाण नहीं है