2012-12-19 8 views
6

में रेल नियंत्रक उदाहरण चर का उपयोग करना तो मैंने आपकी सीएसएस फ़ाइलों में एआरबी का उपयोग करने के बारे में SO पर बहुत सी चर्चा देखी है। मैं <% =%> वाक्यविन्यास का उपयोग करके और फ़ाइल में .erb जोड़कर सीएसएस फ़ाइलों को संसाधित करने के लिए ईआरबी प्राप्त कर सकता हूं, लेकिन मुझे वास्तव में आवश्यकता है कि नियंत्रक में इंस्टेंस चर का उपयोग करना है।सीएसएस

searches_controller.rb

def new 
    @search = Search.new 
    @school = School.find(params[:school]) 
end 

क्या मैं सच में करना चाहते हैं है:

searches.css.scss.erb

h1.logo { 
    color: <%= @school.primary_color %>; 
} 

लेकिन ERB एक फेंक होगा त्रुटि क्योंकि @ स्कूली शून्य है। क्या उन उदाहरण चरों तक पहुंचने के लिए नियंत्रक की आवश्यकता है?

ऐसा करने का एकमात्र अन्य तरीका यह है कि इसे विचारों में डेटा-एट्रिब्यूट के रूप में एम्बेड करना है और फिर इसे सामने के अंत में बदलने के लिए जेएस का उपयोग करना है। यह मुझे संभावित रूप से बेहतर बनाता है क्योंकि सीएसएस फ़ाइल नहीं बदलेगी और हर बार परेशान होने की आवश्यकता है, लेकिन यह भी बहुत कम सुरुचिपूर्ण होगा।

उत्तर

9

आपको यह भी विचार करना होगा कि पूर्व-संकलित संपत्ति परिदृश्य में, सीएसएस संकलन के दौरान स्प्राकेट्स के माध्यम से चलाया जाएगा, इसलिए आप एक स्थिर रंग के साथ समाप्त हो जाएंगे (माना जाता है कि @school वास्तव में तत्काल था जो यह नहीं होगा)। यह अवांछनीय है क्योंकि प्रत्येक स्कूल के पास एक ही रंग होगा (जो भी संकलन चरण के दौरान होता है)।

इस हम अपने उपयोगकर्ताओं को अपने रंग स्पष्ट करने देते हैं, और लेआउट में सीएसएस के एक ब्लॉक में शामिल की तरह

कस्टम ब्रांडिंग के लिए:

:css 
    h1.logo { 
     color: <%= @school.primary_color %>; 
    } 

यह आदर्श नहीं है, लेकिन अनुकूलन की एक छोटी संख्या लगता है अगर आपके पास काफी अच्छी तरह से काम करने के लिए।

+0

धन्यवाद। मैं विचारों के बाहर इसके साथ सौदा करने की उम्मीद कर रहा था, लेकिन ऐसा लगता है कि यह जाने का रास्ता है। – rurabe

+0

क्या आप एक लेआउट में एक सीएसएस ब्लॉक जोड़ने पर अधिक जानकारी प्रदान कर सकते हैं ...? मैं स्क्रीन आकार के आधार पर छवियों को स्वैप करना चाहता हूं और मेरे मीडिया क्वेरी के लिए मेरे आवृत्ति चर देखने के लिए एक तरीका चाहिए। – brntsllvn

2

मैं आपके विचार में @school.primary_color का उपयोग करना चाहता हूं। यह काम करना चाहिए:

<h1 style="color:#{@school.primary_color}">@school.name</h1> 

बस इंटरपोलेशन के लिए डबल उद्धरण चिह्नों का उपयोग करना याद रखें।

+0

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

+0

केवल इसके साथ समस्या यह है कि यदि आपको कई रंगों में एकाधिक स्थानों में उस रंग का उपयोग करना है, तो आप कुछ सुंदर अनमोल कोड के साथ समाप्त होते हैं। –

+0

यह एक अच्छा मुद्दा है। स्कूलों की संख्या के आधार पर, डीबी में बजाए प्रत्येक स्कूल के लिए सीएसएस फाइलों में स्थिरांक को परिभाषित करना भी एक अच्छा विचार हो सकता है। – mehulkar