2011-09-02 21 views
6

मैंने अभी रेल 3.1 और एक सामान्य AJAX फ़ॉर्म में अपडेट किया है एक मॉडल ऑब्जेक्ट बनाएं सफलता पर निम्न त्रुटि उत्पन्न कर रहा है: ActionView::Template::Error (undefined method gsub' for #<ActionDispatch::Flash::FlashHash:0x00000102b73b78>):रेल 3.1 AJAX फॉर्म - "एक्शन व्यू :: टेम्पलेट :: त्रुटि (# <ActionDispatch :: Flash :: FlashHash: 0x00000102b73b78> के लिए अपरिभाषित विधि 'gsub'):"

निर्माण कार्य अच्छी तरह से चल रहा है, डेटा डेटाबेस में सबमिट किया गया है, लेकिन पृष्ठ नहीं बदलेगा और जेएस निष्पादित नहीं होता है। जेएस काम करता है अगर कोई त्रुटि है, त्रुटि संदेश को अपेक्षित रूप से उत्पन्न करना .... तो केवल सफलता ही त्रुटि उत्पन्न कर रही है और जेएस निष्पादित करने में विफल रही है।

नियंत्रक::

def create 
    @contact = Contact.new(params[:contact]) 
    respond_to do |format| 
    if @contact.save 
     flash[:notice] = "Welcome!" 
     format.html 
     format.js 
    else 
     format.html { render 'pages/home'} 
     format.js 
    end 
    end 
end 

दृश्य रूप

<div id="contact_notice"></div> 
<%= form_for @contact, :remote => true do |f| %> 
    <%= f.text_field :email, :id => 'email', 'data-default' => 'Sign up to join the beta!' %><%= f.submit "Submit", :id => 'submit' %> 
<% end %> 

/views/contacts/create.js.erb

<% if @contact.errors.any? %> 

// Create errors 
var errors = $('<div class="flash notice"></div>'); 
<% @contact.errors.full_messages.each do |error| %> 
    errors.append('<%= escape_javascript(error) %>'); 
<% end %> 

// Display errors 
$("#contact_notice").html(errors); 

<% else %> 

// Display success (clearing any errors) 
$("#contact_notice").html('<div class="flash notice"><%=escape_javascript(flash.delete(:notice)) %></div>'); 
<% end %> 

और यहाँ है

यहाँ मेरी कोड है एक नया संपर्क होने पर स्टैक ट्रेस सहेजा गया:

Rendered contacts/create.js.erb (0.6ms) 
Completed 500 Internal Server Error in 13ms 

ActionView::Template::Error (undefined method `gsub' for #<ActionDispatch::Flash::FlashHash:0x000001042b1970>): 
12: <% else %> 
13: 
14: // Display success (clearing any errors) 
15: $("#contact_notice").html('<div class="flash notice"><%= escape_javascript(flash.delete(:notice)) %></div>'); 
16: 
17: <% end %> 
app/views/contacts/create.js.erb:15:in `_app_views_contacts_create_js_erb__3535867194219445180_2168748520' 
app/controllers/contacts_controller.rb:6:in `create' 

मुझे बताएं कि क्या आप देख सकते हैं कि मैं यहां क्या खो रहा हूं। एक गुच्छा धन्यवाद।

+0

आप स्टैकट्रेस कि रेल कंसोल पर या लॉग में जनरेट जब आप त्रुटि मिलती है पोस्ट कर सकते हैं? –

+0

हाँ यहाँ: रेंडर किए गए संपर्क/create.js.erb (0.6ms) 13ms एक्शन व्यू :: टेम्पलेट :: त्रुटि (# के लिए अपरिभाषित विधि 'gsub' ): 12: <% else %> 13: 14: // प्रदर्शन सफलता (किसी भी त्रुटि को साफ करने) 15:। $ ("# contact_notice") एचटीएमएल ('

<%= escape_javascript(flash.delete(:notice)) %>
'); 16: 17: <% end %> एप्लिकेशन/विचारों/संपर्क/create.js.erb: 15: '_app_views_contacts_create_js_erb__3535867194219445180_2168748520 ': 6: एप्लिकेशन/नियंत्रक/contacts_controller.rb' बनाने में' में – tuddy

+0

चाहेंगे कि आपको इन में चाहते हो सकता है आपके ओपी, यहां पढ़ने के लिए मुश्किल है और अन्य इसे देखना चाहते हैं। –

उत्तर

9

रेल कुछ चीजें 3.1 में काम करने के तरीके को बदल गई हैं, जो मुझे लगता है कि रेल 3.1 के लिए Hash का उपयोग नहीं कर रहा है और अब वे Enumerable से इसे बंद कर रहे हैं। Here is an answer जो अधिक जानकारी में जाता है। आप का उपयोग करने के लिए सक्षम होना चाहिए:

flash.discard(:notice) 
वर्ष के बजाय

:

flash.delete(:notice) 
+0

विचित्र! बहुत बहुत धन्यवाद, यह तय है। – tuddy

+0

बहुत बढ़िया, अपने ऐप के साथ शुभकामनाएं। –

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