2010-08-10 11 views
132

यदि post.published?अगर हामल में हालत सच है तो कक्षा में शामिल हों

.post 
/Post stuff 

अन्यथा

.post.gray 
/Post stuff 

मैंने इसे रेल सहायक के साथ कार्यान्वित किया है और यह बदसूरत लगता है।

= content_tag :div, :class => "post" + (" gray" unless post.published?).to_s do 
/Post stuff 

दूसरा संस्करण:

= content_tag :div, :class => "post" + (post.published? ? "" : " gray") do 
/Post stuff 

क्या कोई और सरल और हैमल-विशिष्ट तरीका है?

यूपीडी। Haml- विशिष्ट, लेकिन अभी भी आसान नहीं है:

%div{:class => "post" + (" gray" unless post.published?).to_s} 
/Post stuff 

उत्तर

287
.post{:class => ("gray" unless post.published?)} 
+61

एकाधिक स्थितियों के लिए सिर्फ एक साइड नोट '{वर्ग: [(' कक्षा 1 'जब तक शर्त 1), ('कक्षा 2' अगर शर्त 2)]} '.. आदि –

+0

उत्कृष्ट और उत्कृष्ट - धन्यवाद! –

+4

एकाधिक स्थितियों के लिए अधिक संक्षिप्त: '{वर्ग: [(: कक्षा 1 यदि cond1), (: कक्षा 2 अगर cond2)]}' – Phrogz

13

सच सबसे अच्छी बात यह एक सहायक में डाल दिया है।

%div{ :class => published_class(post) } 

#some_helper.rb 

def published_class(post) 
    "post #{post.published? ? '' : 'gray'}" 
end 
+0

मैंने इसे अपनी सहायक फ़ाइल में रखा है, लेकिन मेरा ऐप मुझे बताता है कि कोई "पोस्ट" चर नहीं है। –

+1

ओह क्षमा करें। जवाब संपादित किया है। – mark

+2

fyi: यदि आप केवल एक निश्चित मामले में कक्षा शामिल करना चाहते हैं और अन्य मामलों में कुछ भी नहीं है तो आप 'nil' सेट कर सकते हैं और विशेषता सेट नहीं की जाएगी, 'class =" " – MMachinegun

21
- classes = ["post", ("gray" unless post.published?)] 
= content_tag :div, class: classes do 
    /Post stuff 

def post_tag post, &block 
    classes = ["post", ("gray" unless post.published?)] 
    content_tag :div, class: classes, &block 
end 

= post_tag post 
    /Post stuff 
+1

को सेट करने के बजाय इतना संक्षिप्त नहीं है, लेकिन एक सहायक में डाल अगर अन्य तरीकों से बेहतर दिखता है। –

+3

यह अच्छी तरह से काम करता है - मैंने देखा है कि आपको '.compact.join (" ") 'की आवश्यकता नहीं है। आप बस 'वर्ग => ["सक्रिय पोस्ट" कर सकते हैं, ("ग्रे" पोस्ट पोस्ट किए जाने तक?)] – Stenerson

9

Haml एक अच्छा इस संभाल करने के लिए जिस तरह से अंतर्निहित होता है:

.post{class: [!post.published? && "gray"] } 

तरह से है कि यह काम करता है कि सशर्त मूल्यांकन किया है और अगर हो जाता है सच है, स्ट्रिंग कक्षाओं में शामिल हो जाती है, अगर नहीं, तो इसमें शामिल नहीं किया जाएगा।

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