2010-11-19 9 views
30

मैं पता नहीं क्यों यह काम नहीं कर रहा है, मैं रेल सीख रहा हूँ और मैं एक किताब इसे इस तरह यह करने के लिए कहते हैं अनुसरण कर रहा हूं:रेल form_for: दूरस्थ => true बुला नहीं है js विधि

<%= form_for([@article,@article.comments.new ], :remote=>true, :html => {:style=>'display: none;' }) do |f|%> 
    <div class="field"> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
     <%= f.label :email %> 
     <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
     <%= f.label :body %> 
     <%= f.text_area :body %> 
    </div> 
    <%= f.submit %> 
<% end %> 

हालांकि यह काम नहीं करता है, और जब मैं फायरबग में अनुरोध की जांच करता हूं तो यूआरएल .js में समाप्त नहीं होता है, क्या आपके पास कोई विचार है? बदलें

+0

क्या आप नियंत्रक-विधियों के अनुसार जोड़ सकते हैं (ई। जी।इंडेक्स, बनाएं, नया) और संबंधित दृश्य फाइलें, तो हम पूरी तस्वीर देख सकते हैं? – Ingo

उत्तर

-11

:

@article 

के लिए

[@article,@article.comments.new ] 

मैं तुम्हें संबंधित खंड पर एपीआई पढ़ने का सुझाव: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

+2

ryudice लेख ryudice के लिए एक नया टिप्पणी फॉर्म देखने के लिए देख रहा है। ryudice's form_for कॉल रियुडिस की इच्छा के लिए सही वाक्यविन्यास है। आपका सुझाव मानक लेख फ़ॉर्म के लिए ठीक होगा। यह भ्रमित है, क्योंकि संदर्भ कभी नहीं बताया गया है। – natedavisolds

32

जब आप, फ़ायरबग में किए गए अनुरोध की जांच सिर्फ इसलिए कि यूआरएल .js के साथ समाप्त नहीं हुआ, इसका मतलब यह नहीं है कि इसे जावास्क्रिप्ट से नहीं कहा गया था। यह सत्यापित करने के लिए कि स्वीकृति पैरामीटर क्या है, यह देखने के लिए आपको अनुरोध शीर्षलेख जांचना चाहिए। अगर यह "एप्लिकेशन/जावास्क्रिप्ट" कहता है तो यह सब अच्छा है।

दूसरा, एक बहुत ही आम समस्या जब कोशिश करने के लिए शुरू करना: दूरस्थ => सत्य यह है कि आवश्यक जावास्क्रिप्ट पुस्तकालय आपके कोड में शामिल नहीं हैं। अगर ऐसा है, बस इसे अपने लेआउट के <head> टैग के अंदर शामिल

<%= javascript_include_tag :defaults %> 
<%= csrf_meta_tag %> 

: तो मेरा अनुमान है कि निम्नलिखित कोड अपने लेआउट से लापता है है।

+0

क्या आपका मतलब है "एचटीएमएल हेडर" टेम्पलेट का हेड टैग जहां रिमोट के साथ फॉर्म/लिंक है: सच है? – Timo

+0

हां, इसे इंगित करने के लिए धन्यवाद। वह इतना स्पष्ट नहीं था। लेकिन हाँ, इसे टैग – DanneManne

21

सबसे अधिक संभावना यह है कि आप rails.js फ़ाइल खो रहे हैं, जो आपके लिए हैडल करता है, चाहे आप प्रोटोटाइप या jquery का उपयोग कर रहे हों।

यदि आप jQuery का उपयोग कर रहे हैं, तो सभी आवश्यक फ़ाइलों को प्राप्त करने का सबसे आसान तरीका jquery-rails मणि का उपयोग कर रहा है। यह jquery और आवश्यक rails.js स्थापित करने के लिए जनरेटर जोड़ देगा। अपने रेल आवेदन जड़ के अंदर की तरह

प्रकार कुछ:

rails g jquery:install 

और फिर, अंदर अपने application.html.erb लाइन

<%= javascript_include_tag :defaults %> 

या स्पष्ट रूप से (मत भूलना अपने jQuery अलग-अलग जोड़ने) जोड़ें:

<%= javascript_include_tag :rails, :application %> 

[संपादित करें: संपत्ति के उपयोग से रेल 3.1 या उससे अधिक के लिए पाइपलाइन]

उपयोग jquery-rails मणि (जैसा कि ऊपर उल्लेख) और (अगर वे पहले से ही नहीं हैं) app/assets/javascripts/application.js निम्न पंक्तियां जोड़ें:

//= require jquery 
//= require jquery_ujs 

आशा इस मदद करता है!

+0

में शामिल किया जाना चाहिए, यह अच्छा काम करता है .. धन्यवाद .. – Neo

+0

हमारे पास यह समस्या थी लेकिन हमने इसे ठीक करने के लिए 'jquery_ujs.js' शामिल किया था। –

+0

हां, सच है, यह रेल 3.1 और संपत्ति पाइपलाइन के साथ थोड़ा सा बदल गया। मैंने इसे प्रतिबिंबित करने के लिए अपना उत्तर अपडेट किया। – nathanvda

4

नियंत्रक की जांच करें: क्या इसका उत्तर देने के लिए कोई जवाब है?

आप पटरियों के साथ अपने अनुप्रयोग उत्पन्न तो पाड़ उत्पन्न, यह यह है, बस पूरे ब्लॉक respond_to समाप्त करने के लिए से, बाहर ले तो जैसे

respond_to do |format| 
     format.html 
     format.xml { .... } 
    end 

कुछ करना होगा; या वैकल्पिक रूप से एक पंक्ति

respond_to :html, :js 

या वैकल्पिक रूप से अतिरिक्त पंक्ति यहाँ

respond_to do |format| 
     format.html 
     format.js 
     format.xml { .... } 
    end 

दिखाए या तो अपने मामले में काम करना चाहिए जोड़कर ब्लॉक संपादित साथ पूरे ब्लॉक की जगह।

4

अपने /app/assets/javascript/application.js फ़ाइल

यह वहाँ में फ़ाइलों को नीचे शामिल किया जाना चाहिए की जाँच करें। jquery_ujsremote=> true सुविधा के लिए ज़िम्मेदार है।

require `jquery` 
require `jquery_ujs` 

हैप्पी कोडिंग !!

+1

'अध्याय 11.2 इटरेशन एफ 2: एजेक्स-आधारित कार्ट बनाना' पर 'रेल के साथ एग्इल वेब विकास' का पालन करते समय मेरे पास एक समान नौसिखिया मुद्दा था। आपकी सूचीबद्ध फ़ाइल में असम्बद्धता '= jquery' की आवश्यकता है' द्वारा समस्या हल हो जाती है। उम्मीद है कि यह अन्य लोगों के लिए मदद करता है। –

+0

यह महान @ cppinitiator है! –

6

यह त्रुटि तब होती है जब आपने jquery_ujs फ़ाइल नहीं जोड़ा है। आपने अभी jquery फ़ाइल शामिल की है।

तो तुम दोनों फ़ाइलों को मैन्युअल रूप से जोड़ने के लिए आप उन्हें देखने या application.js या जो आप विशिष्ट लेआउट के लिए प्रयोग कर रहे हैं किसी भी अन्य फाइल में की आवश्यकता होती है में की जरूरत है।

अपने परिदृश्य के आधार पर, आप 1 या 2 समाधान का पालन कर सकते हैं।

1 समाधान:

<%= javascript_include_tag :jquery, :jquery_ujs %> 

2 समाधान:

  1. आवश्यकता होती है दोनों jQuery और jquery_ujsएप्लिकेशन/परिसंपत्तियों में/application.js

    //= require jquery.js 
    
    //= require jquery_ujs 
    
  2. अपने विशिष्ट लेआउट फ़ाइल में application.js फ़ाइल शामिल करें।

    <%= javascript_include_tag :application %> 
    

नोट:

इसके अलावा दोनों के समाधान के लिए लेआउट फाइल में CSRF टैग को जोड़ने।

<%= csrf_meta_tag %> 

मैं asuming अपने Gemfile में नीचे दिए गए कोड है कि आप और पहले से ही इस रत्न स्थापित कर रहा हूँ।

gem 'jquery-rails' 
+0

दूसरे समाधान ने मेरी समस्या हल की! –

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