2012-11-13 14 views
14

मेरे पास एक ऐसा फॉर्म है जो डीबी को पंक्तियों को दूरस्थ => सत्य के माध्यम से जोड़ रहा है। मैं फिर एक नया डेटा जोड़ना चाहता हूं, लेकिन प्रस्तुत करने के लिए सही दृश्य नहीं मिल सकता है।रेल में नियंत्रक से आंशिक रूप से प्रस्तुत करना

अभी तक, यह नई प्रविष्टि के लिए पूरे show.html.erb पृष्ठ को प्रस्तुत कर रहा है, लेकिन मैं एक न्यूनतम संस्करण को एक के रूप में जोड़ने के लिए लेआउट करना चाहता हूं। क्या मेरे नियंत्रक को यह बताने का एक त्वरित तरीका है कि डीबी में डालने के बाद क्या प्रस्तुत करना है? मैं अपने आंशिक नामित _newly_added.html.erb प्रस्तुत करना

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

def new 
    @task = Task.new 
    render :partial => "/tasks/newly_added", :locals => { :t => @task } 
    end 

धन्यवाद चाहते हैं !!

EDIT मुझे लगता है कि मुझे जो चाहिए वह सिर्फ एक वैकल्पिक "शो" दृश्य है।

मैंने पाया विधि मैं बदलने के लिए की जरूरत है वास्तव में यह था कि:

def create 
    @task = Task.new(params[:task]) 

    respond_to do |format| 
     if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render json: @task, status: :created, location: @task } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

मैं सिर्फ एक विकल्प शो दृश्य बनाने के लिए, और फिर इस बताते हैं कि दृश्य redirect_to करने की जरूरत है।

+0

आप केवल एक पंक्ति 'tr' का आंशिक हो सकते हैं और इसमें नई वस्तु प्रस्तुत कर सकते हैं। फिर आप अपने अजाक्स कॉल का प्रतिक्रिया डेटा प्राप्त कर सकते हैं और HTML को अपनी तालिका में जेनरेट कर सकते हैं। इसके लिए एक answer_to: जेएस लेआउट के बिना और एक विशिष्ट आंशिक – MrYoshiji

उत्तर

11

आपके प्रश्न में परिवर्तनों के अनुसार संपादित किया गया। हालांकि, वास्तव में कुछ भी नहीं बदलता है। आप चीजों के बारे में सोच रहे हैं, और आप कैसे सोच रहे हैं समायोजित करने की जरूरत है। आपको वैकल्पिक शो की आवश्यकता नहीं है, आपको format.js अनुरोध को संभालने की आवश्यकता है।

आंशिक को जावास्क्रिप्ट प्रतिक्रिया के भीतर प्रस्तुत किया जाना चाहिए, नियंत्रक नहीं। , तब

def create 
    @task = Task.new(params[:task]) 

    respond_to do |format| 
     if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render json: @task, status: :created, location: @task } 
     format.js 
     else 
     format.html { render action: "new" } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     format.js 
     end 
    end 
    end 

में देखा गया/कार्य/create.js.coffee

($ '#mytable').append("<%= j render(partial: 'tasks/newly_added', locals: { t: @task }) %>") 

यहाँ क्या हो रहा है कि ब्राउज़र create.js को फोन करेगा है: नियंत्रक अधिक इस तरह दिखता है। respond_to ब्लॉक के format.js की वजह से नियंत्रक create.js टेम्पलेट के साथ प्रतिक्रिया करता है। j_newly_added.html.erb फ़ाइल की सामग्री से बच निकलता है, और इसकी सामग्री तालिका में संलग्न की जाती है। नियंत्रक मौजूदा दृश्य से बातचीत नहीं करता है, इसके बजाए, जावास्क्रिप्ट ब्राउज़र पर भेजा जाता है, और यह दृश्य के साथ इंटरैक्ट करता है।

यदि आप बैकबोन या एम्बर जैसे क्लाइंट-साइड एमवीसी फ्रेमवर्क का उपयोग कर रहे हैं, तो यह सब कुछ बदलता है, लेकिन आपने यह निर्दिष्ट नहीं किया है इसलिए मुझे लगता है कि आप स्टॉक रेल के साथ जा रहे हैं।

+0

का उपयोग करके मैंने अपने मूल प्रश्न में कुछ संपादन किए हैं, मुझे लगता है कि मुझे पता चला कि अब क्या होने की आवश्यकता है, लेकिन मैं वाक्यविन्यास नहीं समझ सकता। – nathan

+0

नए के साथ, तो बनाने के साथ। कुछ भी वास्तव में नहीं बदलता है, लेकिन मैंने आपके उत्तर को आपके संपादित प्रश्न में समायोजित कर दिया है। –

+0

मैंने कोशिश की थी कि इससे पहले कोई प्रबल न हो, लेकिन आपकी पोस्ट देखने के बाद इसे फिर से बनाया गया और यह चाल चल गई। धन्यवाद! – nathan

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