2011-02-15 2 views
5
- if !request.path_info.include? 'A' 
    %{:id => 'A'} 
    "Text" 
- else 
    "Text" 

"टेक्स्ट" दो बार लिखा गया है। मैं इसे एक बार लिखने के लिए कैसे कर सकता हूं और एक ही समय में जांच कर सकता हूं कि path_info में 'ए' शामिल है या नहीं?मैं सिर्फ एक बार "टेक्स्ट" लिखने के लिए कैसे कर सकता हूं और उसी समय जांच कर सकता हूं कि path_info में 'ए' शामिल है या नहीं?

+0

बस आपको लगता है कि आप पसंद करेंगे और बहुत कुछ इस्तेमाल करेंगे? ;-) – DJTripleThreat

+0

@DJTripleThreat: हाँ मैं करता हूँ! –

उत्तर

2

आप इस constuct का उपयोग कर विशेषता सशर्त बना सकते हैं:

%{:id => ('A' if request.path_info.include? 'A')} 
    "Text" 
+0

धन्यवाद लेकिन इस मामले में, एक विभाजन हमेशा आईडी के साथ या बिना मौजूद होता है। Div को कैसे हटाएं? –

2

बस एक स्थानीय चर के अंदर यह बचत के बारे में क्या?

- text = "Text"  
- if !request.path_info.include? 'A' 
    %div{:id => 'A'} 
    = text 
- else 
    = text 
+0

इसे एक चर में डालने में काफी कुछ नहीं मिला है। –

+1

आप उस सामग्री को परिभाषित करते हैं जिसे आप केवल एक ही स्थान पर प्रदर्शित करना चाहते हैं। एक बार ऐसा करने के बाद, आप उस प्रारूप पर ध्यान केंद्रित कर सकते हैं जिसमें आप इसे आउटपुट करना चाहते हैं। यदि शर्तों को पूरा किया जाता है, तो आप अपनी सामग्री को एक div के अंदर लपेटते हैं, अन्यथा आप इसे केवल आउटपुट कर रहे हैं (बिना div के)। इसके अलावा, मुझे नहीं लगता कि एचआईएमएल में सशर्त रूप से किसी एक लेबलर में सामग्री को लपेटना संभव है क्योंकि यह इंडेंटेशन का इलाज करता है। – Tumas

1

यह आदर्श नहीं है, लेकिन आप एचटीएमएल के साथ एचटीएमएल का उपयोग कर सकते हैं। जिस तरह से मैं यह कर दिया है है:

- if !request.path_info.include? 'A' 
    <div id="A"> 
Text 
- if !request.path_info.include? 'A' 
    </div> 

इस तरह के छोटे पाठ के साथ गंदा है, लेकिन जब Text एक बड़ी कोड ब्लॉक है कि आप एक div साथ रैप वैकल्पिक करना चाहते हैं, यह वास्तव में मदद कर सकते हैं सूखी का पालन करें।

1

संक्षिप्त उत्तर आप नहीं कर सकते हैं। एचएएमएल एक इंडेंटेशन विशिष्ट प्रारूप है, इसलिए यह आपको पुनरावृत्ति के बिना जो भी करना चाहते हैं, करने में सक्षम होने की अनुमति नहीं दे सकता है क्योंकि पार्सिंग के दौरान दोनों स्थितियां अलग-अलग पथ हैं।

4

ऐसा करने के दो तरीके हैं। एक आंशिक का उपयोग करना, या एक का उपयोग कर content_for ब्लॉक:

तो "पाठ" लंबे समय तक था, या एक महत्वपूर्ण सबट्री था, आप इसे एक आंशिक में निकाल सकते। यह आपके कोड को थोड़ा सा डीआरवाई करेगा। दिए गए उदाहरण में यह ओवरकिल की तरह प्रतीत होता है।

इस मामले में बेहतर तरीका तो जैसे एक content_for ब्लॉक का उपयोग करने, होगा:

- if !request.path_info.include? 'A' 
    %{:id => 'A'} 
    =yield :content 
- else 
    =yield :content 

-content_for :content do 
    Text 

यहाँ हम दोनों ही स्थानों पर content_for ब्लॉक करने के लिए उपज, "पाठ" नकल करने की आवश्यकता नहीं पड़ती। मैं इस मामले में कहूंगा कि यह आपका सबसे अच्छा समाधान है।

+1

मुझे शायद उल्लेख करना चाहिए कि यह एक रेल केवल समाधान है। – superluminary

+0

केवल रूबी। FTFY। –

+0

हां, यह केवल रेल सहायक के साथ काम करता है। यदि आप रेल के बाहर HAML का उपयोग कर रहे हैं, तो आपको एरिक या तुमास समाधान का उपयोग करना चाहिए। – superluminary

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

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