2010-03-04 23 views
31

प्रदर्शित करें मुझे यकीन नहीं है कि मैं यहां सबसे अच्छा तरीका कर रहा हूं, लेकिन मेरे पास डेटा का एक ब्लॉक है जिसे मैं खोज के बाद दिखाना चाहता हूं और वहां बिल्कुल नहीं होना चाहिए पहले। सबसे पहले, दिखाने के लिए कुछ भी नहीं है, और दूसरा मॉडल यह संदर्भ शून्य है इसलिए यह अपवाद फेंकता है।रेल पर रूबी: सशर्त रूप से आंशिक रूप से आंशिक

मैंने इस ब्लॉक को आंशिक टेम्पलेट में रखा और इसे मेरे लेआउट में उचित स्थान जोड़ा। क्या आंशिक रूप से आंशिक रूप से आंशिक रूप से प्रस्तुत करने का कोई तरीका है? क्या इस समस्या से संपर्क करने का कोई बेहतर तरीका है?

उत्तर

41

रूबी आपको बस इतना करना इस तरह अच्छा चीजों की अनुमति देता है और आप इसे एक हैश पास करते हैं जो बताता है कि कौन सा आंशिक प्रस्तुत करना है। रूबी आपको चीजों को एक पंक्ति पर रखने की अनुमति देता है (जो अक्सर उन्हें अधिक पठनीय और संक्षेप में बनाता है, खासकर विचारों में), इसलिए if @conditions अनुभाग केवल नियमित रूप से बयान है।

<% if @conditions %> 
    <%= render :partial => "foo/bar" %> 
<% end %> 

संपादित करें:: यह भी तरह से किया जा सकता

रूबी भी आप if के स्थान पर unless कीवर्ड का उपयोग करने की अनुमति देता है। यह कोड को और भी पठनीय बनाता है, और आपको नकारात्मक तुलना करने से रोकता है।

<%= render :partial => "foo/bar" if [email protected] %> 
#becomes 
<%= render :partial => "foo/bar" unless @conditions %> 
+0

'<% = प्रस्तुत करें: आंशिक =>" foo/bar "जब तक कि @conditions%>' वह समानता है जिसे मैं ढूंढ रहा था। और, नीचे दी गई आपकी टिप्पणी के बारे में, मैं मानता हूं कि चिंताओं को अलग करने के बारे में पूरी तरह से दयनीय होना मूर्खतापूर्ण होगा। यह वास्तव में एक कारण है कि मुझे रेलों को डीजेंगो जैसी प्रणाली बनाम लचीलापन को कम करना पसंद है। लेकिन जब भी संभव हो मैं इसे सीमित करना चाहता हूं। क्लासिक एएसपी कर रहे मेरे दिनों में दुःस्वप्न flashbacks, मुझे लगता है। सहायता के लिए धन्यवाद! –

+0

कोई समस्या नहीं है। एएसपी जैसे कुछ से स्विच करने से कठिन हिस्सा यह निर्धारित कर रहा है कि आपका एप्लिकेशन/व्यवसाय तर्क कहां समाप्त होता है, और जहां दृश्य तर्क शुरू होता है। –

5

एक आसान तरीका एक सहायक विधि का उपयोग करना है। सीधे देखने में तर्क डालने से हेल्पर्स थोड़ा क्लीनर होते हैं।

तो, आपके विचार की तरह कुछ हो सकता है: मान लिया जाये कि

def render_stuff_conditionally 
    if @contional_check 
    render :partial => 'stuff' 
    end 
end 

जहां स्पष्ट रूप से चीजों को अधिक उचित नाम हैं

+0

सहमत हैं, एक सहायक में तर्क डालना सबसे अच्छा है। – bojo

+1

मैं असहमत हूं। नियंत्रक तर्क और तर्क देखने के बीच एक अलग अंतर है, और यह तर्क देखें। यह एक संक्षिप्त एक लाइनर के रूप में पूरा किया जा सकता है जैसा मैंने सुझाव दिया था। यह विकल्प केवल यह पता लगाना मुश्किल बनाता है कि कोड को डीबग करने या बनाए रखने के दौरान किन स्थितियों की जांच की जा रही है। –

+2

मुझे लगता है कि स्थिति पर विचार करने और वास्तव में आप एक सहायक का उपयोग करने या उपयोग करने से प्राप्त करने के लायक हैं। यदि आप जिस कोड को सहायक में भरने पर विचार कर रहे हैं, वह दृश्य की पठनीयता में सुधार करेगा, यह आपके लिए उपयोगी हो सकता है। यदि दृश्य के अंदर सशर्त (या जो भी कोड) छोड़ना कोड को अधिक पठनीय और रखरखाव करने के लिए उधार देता है तो उस पर भी विचार करना है। हेल्पर्स सभी प्रकार के कोड के लिए कैच-सब होने का अंत कर सकते हैं, उस स्थिति में आपका व्यू कोड सुंदर हो सकता है लेकिन आपने अभी "गुब्बारा निचोड़ा है" (और गड़बड़ दूर नहीं गई)। – Tass

1

:

<%= render_stuff_conditionally %> 

और अपने सहायक इस पर नियंत्रण के लिए एक विधि के लिए होता है मैं आपका पीछा कर रहा हूं, आप इसे दृश्य स्तर पर करते हैं।

<% if [email protected]_search_data.nil? %> 
<% render :partial => 'foo/bar' %> 
<% end %> 

आशा है कि मदद करता है। यदि नहीं, तो शायद आपके कोड का एक उदाहरण पोस्ट करें। ,

<%= render(:partial => "foo/bar") if @conditions %> 

render एक समारोह है: यह के रूप में लिखा जा सकता है,

<%= render :partial => "foo/bar" if @conditions %> 

इस थोड़ा आसान पढ़ने और समझने में करने के लिए:

+1

वास्तव में प्रतिक्रिया पर इंतजार करते समय मैंने क्या किया। यह काम करता है, लेकिन अगर उचित रूप से संभव हो तो मैं एक दृश्य में सशर्त तर्क से बचना पसंद करता हूं। –

+0

पीट का समाधान उस मामले में जाने का सबसे अच्छा तरीका है। – bojo

+0

@ डोनाल्ड: विचारों में तर्क से दूर शर्मिंदा होने का कोई कारण नहीं है। "व्यू लॉजिक" और "एप्लिकेशन लॉजिक" के बीच एक अच्छी रेखा है। –

संबंधित मुद्दे