में परिभाषित किया गया है, मैं वास्तविक टेम्पलेट के आधार पर लेआउट स्तर पर एक सशर्त प्रतिपादन करना चाहता हूं, content_for(:an__area)
परिभाषित किया गया है, किसी भी विचार को यह कैसे किया जाए?रेल उपज की जांच करते हैं: क्षेत्र को
उत्तर
@content_for_whatever
मान्य नहीं है। उपयोग content_for?
बजाय, इस तरह:
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
सहायक 'content_for?' केवल रेल में मौजूद है। रेल 2 में आप '@content_for _... 'आवृत्ति चर का उपयोग कर सकते हैं । – lest
बढ़िया! मैंने इस के लिए बहुत लंबे समय तक काम-आसपास लिखा है। अब और नहीं। – morganjlopes
रेल में भी काम करता है 4. महान थाक्स – daniel
ठीक है, मैं बिना किसी जवाब के शर्मनाक रूप से स्वयं जवाब देने जा रहा हूं और मुझे पहले ही जवाब मिल गया है :) इसे एप्लिकेशन_हेल्पर.आरबी या कहीं भी सुविधाजनक में कहीं भी एक सहायक विधि के रूप में परिभाषित करें।
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 इंस्टेंस वैरिएबल को बहिष्कृत किया गया है, इसलिए आपका समाधान भविष्य का सबूत नहीं है –
एक सहायक बनाया जा सकता:
def content_defined?(var)
content_var_name="@content_for_#{var}"
!instance_variable_get(content_var_name).nil?
end
और अपने लेआउट में इस का उपयोग करें: तो
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
: एक सहायक विधि बनाने के लिए
<% if content_defined?(:an__area) %>
<h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
यह प्रश्न का उत्तर नहीं देता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। – eirikir
मैं @ वीरिकिर से सहमत हूं, यह सुनिश्चित नहीं करता कि मेरा 6 साल का छोटा आत्म क्या सोच रहा था। मैं रेलवे 2 पर अभी भी उन लोगों के लिए अपना उत्तर बढ़ा रहा हूं और छोड़ रहा हूं .. अनावश्यक प्रस्ताव के बिना; – Nick
वास्तव में आवश्यक नहीं निश्चित रूप से आपके विचार में:
<% content_for :sidebar do %>
...
<% end %>
मैं यह सब समय का उपयोग सशर्त एक एक स्तंभ और दो कॉलम लेआउट
मैं उपज दो बार फोन करने के प्रदर्शन निहितार्थ के बारे में सुनिश्चित नहीं कर रहा हूँ के बीच जाने के लिए, लेकिन यह आंतरिक की परवाह किए बिना क्या करेंगे उपज के कार्यान्वयन (@content_for_xyz हटाई गई है) और किसी भी अतिरिक्त कोड या सहायक तरीकों के बिना:
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
<%if content_for?(:content)%>
<%= yield(:content) %>
<%end%>
देखें मेरी [जवाब] (http://stackoverflow.com/questions/3347322/yield-if-content-render-something-otherwise-rails-3/7409626 # 7409626) रेल में इस व्यवहार को समाहित करने के लिए एक सहायक विधि बनाने के लिए 3. – tristanm