2012-04-10 21 views
5

मैं अब कुछ घंटों के लिए स्टैक ओवरफ़्लो के माध्यम से खोज रहा हूं, लेकिन मेरे संबंधित मुद्दे में से कोई भी संबंधित प्रश्न लागू नहीं होता है।नियंत्रक में अतिरिक्त आवृत्ति चर शून्य है?

मैं रेल के लिए नया हूं, यह मेरा पहला असली प्रोजेक्ट है, और मैं एमवीसी सेटअप को थोड़ा उलझन में डाल सकता हूं। अलग-अलग मानकों के साथ एक जटिल खोज की जा रही

def create 
    @search = Search.new(params[:search]) 
    tempstr = searchstr(@search) 
    @stars = Star.where("tempstr", :limit => 100) 
end 

@search ठीक बनाया जाता है,: मैं जबकि searches_controller.rb की एक कार्रवाई में @stars उदाहरण चर निर्दिष्ट करने के लिए प्रयास कर रहा हूँ। tempstrsearchstr(@search) के परिणामों के लिए बस एक साधारण स्ट्रिंग कंटेनर है, जो खोज मापदंडों को एक MySQL-प्रासंगिक स्ट्रिंग में परिवर्तित करने के लिए एक त्वरित विधि है (जो सामान्य रूप से .where सहायक का उपयोग करने की कोशिश करने से अधिक आसान लगता है)। मुझे यकीन है कि मैं सीधे searchstr(@search) को सीधे कहीं भी डाल सकता हूं, लेकिन मैंने उन्हें अभी तक विभाजित कर दिया है ताकि मैं तत्वों का निरीक्षण कर सकूं।

वैसे भी, जब मैं @stars को show.html.erb दृश्य में कॉल करने का प्रयास करता हूं तो समस्या तब आती है। यहां तक ​​कि इस के रूप में सरल कुछ के साथ:

<% @stars.each do |star| %> 
    <%= display stuff %> 
<% end %> 

मैं 'each' is not a method of nil:NilClass कह कोई त्रुटि मिलती है। तो, मैं इसे देखने के लिए अगर @stars था शून्य निम्नलिखित करने के लिए बदल:

<%= @stars.inspect %> 

पर्याप्त ज़रूर, @starsnil है। हालांकि, जब मैं अपने नियंत्रक में यह पंक्ति जोड़ @stars जाँच करने के लिए वहाँ:

return render @stars.each 

मुझे लगता है कि चर Star.where (से सही तारा वस्तुओं से भर जाता है), बस के रूप में मैं इरादा था। एक त्वरित .inspect दिखाता है कि नियंत्रक में परिवर्तक शून्य नहीं है।

तो, मुझे यकीन नहीं है कि दृश्य इसे शून्य के रूप में क्यों प्राप्त कर रहा है अगर इसे नियंत्रक में ठीक से परिभाषित किया गया है। मुझे आश्चर्य नहीं होगा अगर मैं गलत समझ रहा था कि एमवीसी कैसे काम करता है। स्टार क्लास को स्टार मॉडल में परिभाषित किया गया था, लेकिन शायद ऐसा इसलिए है क्योंकि मैं इसे खोज नियंत्रक से एक्सेस करने का प्रयास कर रहा हूं, और इस प्रकार इसे देखने के लिए प्रारंभ नहीं किया गया है?

क्या मुझे यह किसी और तरीके से करने जा रहा है? मैंने स्थानीय चर का उपयोग करने का प्रयास किया (stars का उपयोग @stars के बजाय), लेकिन फिर दृश्य "अपरिभाषित स्थानीय चर या विधि 'सितारों" कहता है।

किसी भी मदद की बहुत सराहना की जाएगी, मैंने जटिल खोज बनाने और डेटाबेस में स्टार फ़ाइल डेटा को पार्स करने के घंटों के लिए पहले से ही अपने मस्तिष्क को तोड़ दिया है, इसलिए मैं थोड़ा जला दिया गया हूं। अगर अनुरोध किया गया तो मैं अधिक जानकारी प्रदान कर सकता हूं, मुझे यकीन नहीं है कि उत्तर देने में और क्या मददगार होगा।

+0

ठीक है, आप निश्चित रूप से <% = @ stars.each%> नहीं चाहते हैं; क्या यह एक टाइपो है? साथ ही, '" # {tempstr} "' 'tempstr' पहले से ही एक स्ट्रिंग थोड़ा अनावश्यक है। यदि आप नियंत्रक में लॉग या 'pry' करते हैं तो '@ stars' में वास्तव में मान होते हैं? –

+0

@ डेव न्यूटन - एक के लिए, tempstr पकड़ने के लिए धन्यवाद; मैं मूल रूप से ऐसा करने के लिए था। रेल सिंटैक्स के साथ, जहां मूल्यांकन की आवश्यकता होगी। 2 के लिए, = में एक टाइपो था, और मैं इसे प्रश्न में ठीक कर दूंगा, धन्यवाद। '@stars.each do | star | आउटपुट के लिए 'logger.debug' का उपयोग करके 3 के लिए star.ra end' (जहां 'star.ra' स्टार वैरिएबल में से एक है) ने @ स्टर्स की पूरी सामग्री को लॉग किया है, जिसमें 2 सितारों के सभी चर शामिल हैं। कहीं भी जाना चाहिए। मुझे लगता है कि इसका मतलब है कि इसमें मूल्य होते हैं, हालांकि यह इसे कहीं और से प्राप्त कर सकता है, मुझे लगता है? – Xadera

उत्तर

3

आप create विधि में @stars सेट कर रहे हैं, लेकिन जिस दृश्य के बारे में आप बात कर रहे हैं वह show.html.erb है। show विधि में भी @stars सेट करने का प्रयास करें। कुछ इस तरह:

def show 
    @search = Search.find(params[:id]) 
    tempstr = searchstr(@search) 
    @stars = Star.where("tempstr", :limit => 100) 
end 

यदि यह आप में मदद नहीं करता है, कृपया आप के बाकी कार्यों नियंत्रक, तो हम आपको बेहतर कर सकते हैं।

+0

हाँ, आप बिल्कुल सही थे! मैंने बस इसे पोस्ट करने से पहले खुद को समझ लिया था, लेकिन जवाब देने और पुष्टि करने के लिए बहुत बहुत धन्यवाद! मैंने मूल रूप से सोचा था कि शो पेज स्वचालित रूप से वहां से प्रारंभ करते समय बनाएं विधि का उपयोग करता था, लेकिन मैं गलत था। इस तरह की एक साधारण गलती ने मुझे अपने दिमाग को खाना बनाने में घंटों बिताए। – Xadera

+0

आपने उत्तर दिया कि मुझे पूरी तरह से संबंधित रेल मुद्दे को हल करने में मदद मिली। आप ऊपर लायक हैं: डी – kubbing

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