2013-03-29 2 views
5

के साथ पेज-विशिष्ट सीएसएस मैं अपने रेल एप्लिकेशन के लिए दो अलग-अलग इंटरफेस का परीक्षण करना चाहता हूं। आदर्श रूप में, मैं दो अलग-अलग सीएसएस फाइलें चाहता हूं, जो प्रत्येक इंटरफ़ेस से जुड़े होते हैं (उदा।, New_interface.css और old_interface.css)। मेरे पास वर्तमान में इंटरफेस के लिए दो अलग-अलग आंशिक हैं, जिन्हें _new_interface.html.erb कहा जाता है और जिसे _old_interface.html.erb कहा जाता है। यदि कोई विशेष दृश्य लोड होने पर मैं सही सीएसएस फ़ाइल का आह्वान करना चाहता हूं, तो मैं यह कैसे करूँगा? उदाहरण के लिए, यदि मैं _new_interface.html.erb लोड करता हूं, तो मैं इसे new_interface.css फ़ाइल लोड करना चाहता हूं और old_interface.css फ़ाइल को अनदेखा कर सकता हूं।रेल ऐप

मेरे application.css:

/* 
*= require_tree 
*/ 
+1

कृपया यह पिछला प्रश्न देखें, यह जावास्क्रिप्ट के बारे में है लेकिन समाधान सीएसएस के लिए समान है। http://stackoverflow.com/questions/6167805/using-rails-3-1-where-do-you-put-your-page- विशिष्ट- जावास्क्रिप्ट- कोड – depa

+0

मैं इस समाधान का उपयोग कर समाप्त हुआ। आपके प्रतिक्रिया के लिए धन्येवाद! – scientiffic

+0

यदि आपको आवश्यकता हो तो मैंने यहां इस प्रश्न का उत्तर दिया। http://stackoverflow.com/questions/26243434/separate-css- फ़ोल्डर्स-for-separate-rails-controllers/26246392#26246392 – user3591126

उत्तर

5

यह सवाल आप क्या करने की जरूरत करने के उद्देश्य से किया जा रहा है: Using Rails 3.1 assets pipeline to conditionally use certain css

संक्षेप में, आप में अपने एप्लिकेशन/आस्तियों/स्टाइलशीट फ़ोल्डर पुनर्व्यवस्थित करने की आवश्यकता कुछ उपनिर्देशिकाएं और अपनी मेनिफेस्ट फाइलें बदलें ताकि सब कुछ रन टाइम पर एक साथ बंडल हो जाए।

फिर आप अपने दृश्य में कुछ सशर्त तर्क डाल सकते हैं ताकि यह नौकरी के लिए सही सीएसएस लोड कर सके। Content_for टैग शायद यहां उपयोगी होगा। आप ऐप/व्यू/लेआउट/application.html.erb संपादित कर सकते हैं और अन्य जावास्क्रिप्ट <% = उपज के बाद एक लाइन शामिल कर सकते हैं: view_specific_css%>। फिर अपने दृश्य फ़ाइल में आप

<% content_for :view_specific_css do %> 
    <%= stylesheet_link_tag "whatever %> 
<% end %> 
3

का उपयोग आप उन दोनों को application.css के हिस्से के रूप रखना चाहिए कर सकते हैं और

body{:class => @old_layout ? "old_layout" : "new_layout"} 

तो निम्नलिखित

application.html.haml/ERB करते हैं जब कभी भी आप एक ऐसे क्रिया में हैं जो आपके नियंत्रक में पुराने लेआउट से बाहर है

@old_layout = true 

फिर में अपने सीएसएस फ़ाइलों या तो body.old_layout या body.new_layout या एससीएसएस, सास के एक सबसेट का उपयोग करें, और अपने वर्तमान सीएसएस फ़ाइलें रैप के साथ आगे जोड़ते सब कुछ की तरह तो

body.old_layout{ 
    #all your old layout css goes here, all but body statements of course 
} 

body.new_layout{ 
    #all your new layout css goes here, all but body statements of course 
} 

इस तरह से आप चीजों को एक सीएसएस फ़ाइल के साथ सरल रखें। और एक समाधान के साथ जो आपको आसानी से एक समय में प्रत्येक नियंत्रक कार्रवाई को स्विच करने की अनुमति देता है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। क्या आप समझा सकते हैं कि इस लाइन का क्या अर्थ है? शरीर {: class => @old_layout? "old_layout": "new_layout"} क्या इसका मतलब यह है कि यह old_layout के मान की जांच करता है और यदि यह सत्य है और यह गलत है तो new_layout को बॉडी क्लास old_layout बनाता है? – scientiffic

+1

हां सही के बारे में है। लेकिन याद रखें कि यह new_layout भी करेगा यदि (at) old_layout शून्य भी है, इसलिए जब आप नए लेआउट का उपयोग करने वाली विधि से निपटते हैं तो आपको अपने कंट्रोलर एक्शन में old_layout सेट करने की आवश्यकता नहीं है। यह भी चिह्नित करने का एक अच्छा तरीका है कि किन विधियों को अभी भी अपग्रेड करने की आवश्यकता है क्योंकि उनमें से प्रत्येक में पुराने_लेआउट = सत्य होगा। – rovermicrover

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