2009-03-21 12 views
5

का उपयोग कर रेल दृश्य में एक मॉडल विशेषता उत्तीर्ण करना मैं अपने नियंत्रक में किसी क्रिया के अंदर से एक नए मान को सफलतापूर्वक सेट करने के बाद, एक दृश्य में एक मॉडल विशेषता उत्तीर्ण करने का प्रयास कर रहा हूं। लेकिन यह चर हमेशा दृश्य के समय तक शून्य होता है, इसलिए मैं इसे सशर्त रूप से प्रदर्शित करने के लिए उपयोग नहीं कर सकता। मुझे यह जोड़ना चाहिए कि यह विशेषता डेटाबेस में एक फ़ील्ड नहीं है। मैं क्या खो रहा/गलत कर रहा हूँ?redirect_to

यहाँ मेरी मॉडल में कोड है:

attr_accessor :mode 

#getter 
def mode 
@mode 
end 

#setter 
def mode=(val) 
@mode = val 
end 

... नियंत्रक में:

@report.mode = "t" 
redirect_to edit_report_path(@report) 

... और मेरे विचार में:

<%= build_report(@report.mode) %> 

.. लेकिन इस सहायक विधि को वेरिएबल नहीं मिला है जिसे मैंने अभी नियंत्रक में सेट किया है। यह शून्य है। क्या देता है? जाहिर है, मैं यहाँ कुछ बुनियादी याद कर रहा हूं क्योंकि ऐसा लगता है कि यह सीधा होना चाहिए। किसी भी जानकारी की काफी सराहना की जाएगी। धन्यवाद।

उत्तर

3

edit_report_path उस में @report की आईडी के साथ एक यूआरएल उत्पन्न करता है।

redirect_to अनिवार्य रूप से एक नया अनुरोध बनाता है, और उस यूआरएल पर जाता है। जब यह edit पर आता है, तो यह सब आईडी है। आम तौर पर यह ठीक है - यह ऑब्जेक्ट को देखता है और चल रहा है, लेकिन निश्चित रूप से यह आपके द्वारा सेट किए गए गैर-डीबी फ़ील्ड नहीं होने वाला है।

इसे ठीक करने के कुछ तरीके हैं। आप इसका उपयोग कर सकते हैं: संपादन पृष्ठ पर जाने के बजाए प्रस्तुत करें - फिर @report फ़ील्ड सेट होगा।

@report.mode = "t" 
render :action => edit and return 

या, आप mode डेटाबेस फ़ील्ड बना सकते हैं।

+0

यही वह है जो मैंने उपयोग किया: प्रस्तुत करें (: action => 'संपादित करें',: object => @report) और वापस लौटें ... – echobase

0

समस्या redirect_to है; आप क्लाइंट को एक प्रतिक्रिया वापस कर रहे हैं जो इसे एक अलग यूआरएल के साथ अनुरोध को फिर से शुरू करने का कारण बनता है। उस दूसरे अनुरोध में मोड सेट नहीं है क्योंकि आपने पहले अनुरोध को लपेटने से पहले इसे सहेजा नहीं था।

2

यहां समस्या redirect_to में है। जब आप कहीं और रीडायरेक्ट करते हैं तो सभी इंस्टेंस चर खो जाते हैं। तो जब आप @report.mode = "t" सेट करते हैं तो यह विशेषता सेट करता है। लेकिन जब आप रीडायरेक्ट करते हैं कि डेटा खो गया है।

मुझे लगता है कि <%= build_report(@report.mode) %> संपादन_report.html.erb में है और जब आप 'मोड' सेट करते हैं तो कोड संपादन कार्रवाई में नहीं है। यदि यह मामला है तो आप की तरह यूआरएल में संपादित कार्रवाई करने के लिए report.mode पारित करने में सक्षम हो सकता है:

build_report(@report.mode, :mode => "t") 
संबंधित मुद्दे