2013-10-31 4 views
7

इसने मुझे कई अलग-अलग मौकों पर भ्रमित कर दिया है और हर बार जब मैं इंटरनेट या वर्ल्ड वाइड वेब पर एक अच्छा जवाब खोजने के लिए संघर्ष करता हूं। मान लीजिए कि मेरी जावास्क्रिप्ट फ़ाइल में मैं एक चरjQuery AJAX का उपयोग कर रेलों को वापस अंत में पैराम में डेटा भेजें

var myLoc = { lat: 35, lon: -110 } 

कि मैं जियोलोकेशन whatnot का उपयोग करने से मिला करते हैं। मैं इस जानकारी को बैकएंड पर भेजना चाहता हूं ताकि इसे एक विशिष्ट पोस्ट के साथ संबद्ध किया जा सके जिसे मैं बनाने जा रहा हूं।

मान लें मेरी मार्गों सिर्फ इस प्रकार हैं:

resources :users do 
    resources :posts 
end 

अगर यह सही तरीका है, लेकिन क्या मन में आता है कुछ इस तरह है मैं नहीं जानता:

$.get('/users/' + JSON.stringify(myLoc) + '/posts/new', function() {console.log("please work")}); 

मेरे सवाल कर रहे हैं :

ए। क्या यह काम करना चाहिए?
बी क्या यह करने का सही तरीका है?
सी। क्या आप इस तरह के फ्रंट-एंड सामान बैकएंड में किसी भी मार्ग पर भेज सकते हैं?

बहुत सराहना की।

+0

'A.' आप एक तरह से है सही विचार 'बी' नहीं, आपको अपने रेल ऐप के भीतर एक एपीआई नेमस्पेस और मार्ग निर्दिष्ट करना चाहिए। आदर्श रूप में, आपका एपीआई JSON के साथ jQuery AJAX अनुरोधों पर वापस प्रतिक्रिया देगा। आप गलत तरीके से '$ .get' का भी उपयोग कर रहे हैं। आपको उस jQuery विधि पर दस्तावेज़ को पढ़ना चाहिए। 'सी 'हां, लेकिन मार्ग इसे पसंद नहीं कर सकता है। उत्तर 'बी' देखें। –

+0

एपीआई नेमस्पेस कैसे काम करता है? क्या आपके पास उस – natecraft1

उत्तर

8

आप क्वेरी-स्ट्रिंग के माध्यम से get वाले किसी पृष्ठ पर जानकारी भेज सकते हैं, तो इसका उपयोग new में फ़ील्ड को पॉप्युलेट करने के लिए किया जा सकता है, जहां यह फ़ॉर्म अंततः निर्माण कार्य को सबमिट करता है।

हालांकि, यह प्रतिक्रिया में नए एक्शन व्यू के शरीर को भी वापस कर देगा, जिसे आप चाहें तो अगर आप इस पृष्ठ को किसी संवाद या किसी चीज़ के लिए अतुल्यकालिक रूप से खींचने के लिए उपयोग कर रहे हैं।

यह बेहतर हो सकता है, यदि आप पोस्ट बनाने के लिए post पर /create पर पोस्ट नियंत्रक पर कार्रवाई कर रहे हैं तो यह बेहतर हो सकता है।

फिर आप JSON में डेटा को post के रूप में भेज सकते हैं और ऑब्जेक्ट params हैश में अनुवाद करेगा जब आपका नियंत्रक इसे पार्स करने और पोस्ट बनाने के लिए जाता है। ध्यान में रखते हुए

js:

var url = '/users/' + userId + '/posts/create'; 
var myLoc = { 'lat': 35, 'lon': -110 }; 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: myLoc 
}); 
routes.rb में

:

match 'users/:user_id/posts/create' => 'posts#create', :via => :post 
posts_controller.rb में

:

def create 
    post = Post.new(params[:myLoc]) 
    if post.save! 
    render :status => 200 
    else 
    # exception handling 
    end 
end 
+1

पर जानकारी के लिए एक अच्छा लिंक है, आपको यूआरएल में 'बनाएं' निर्दिष्ट करने की आवश्यकता नहीं है और मैच को लागू नहीं किया गया है। पोस्ट_controller.rb –

+0

में 'create' विधि के लिए एक POST अनुरोध/उपयोगकर्ता/user_id/पोस्ट का नक्शा होगा, आप सही हैं! यह संसाधन रूटिंग की एक विशेषता है जैसा कि यहां देखा गया है: http://guides.rubyonrails.org/routing।एचटीएमएल # क्रूड-वर्ब्स-एंड-एक्शन –

+0

मुझे इसका अर्थ नहीं मिलता है "हालांकि, यह प्रतिक्रिया में नए एक्शन व्यू के शरीर को भी वापस कर देगा, जिसे आप चाहें यदि आप इसका उपयोग उस पृष्ठ को अतुल्यकालिक रूप से खींचने के लिए कर रहे हैं एक संवाद या कुछ के लिए। " और क्या मैं इस तरह की जानकारी किसी भी मार्ग का उपयोग कर भेज सकता हूं? पैरामीटर के बिना भी, उदाहरण के लिए '/ show_posts' प्राप्त करें? – natecraft1

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