2009-03-21 10 views
11

मेरे नियंत्रक कार्यों में से एक के अंत में मुझे उस पृष्ठ पर रीडायरेक्ट करने की आवश्यकता है जो केवल अनुरोध स्वीकार करता है। मैं यह पता लगाने की कोशिश कर रहा हूं कि पुष्ट अनुरोध का उपयोग करने के लिए redirect_to कैसे प्राप्त करें, लेकिन कोई सफलता नहीं।आप एक अलग HTTP अनुरोध का उपयोग करने के लिए redirect_ को कैसे बना सकते हैं?

क्या यह संभव है? या यह पूरा करने का एक और तरीका है?

उत्तर

2

ठीक है, तो मुझे मेरी समस्या का समाधान मिला। मुझे स्थिति here पर बहुत अच्छी तरह से लिखा गया। मेरे कार्यान्वयन इस तरह दिखता है:

private 
def redirect_post(redirect_post_params) 
    controller_name = redirect_post_params[:controller] 
    controller = "#{controller_name.camelize}Controller".constantize 
    # Throw out existing params and merge the stored ones 
    request.parameters.reject! { true } 
    request.parameters.merge!(redirect_post_params) 
    controller.process(request, response) 
    if response.redirected_to 
    @performed_redirect = true 
    else 
    @performed_render = true 
    end 
end 

तो मैं कहा जाता है इस तरह इस विधि:

redirect_post :controller => 'registrations', :action => 'order', :_method => 'put', :authenticity_token => params[:authenticity_token] 

तो मैं एक पोस्ट अनुरोध करने वाले (redirect_post का प्रयोग करके) द्वारा 'झूठे' पुट अनुरोध करने में सक्षम था और उसके बाद _method परम को 'put' असाइन करना। यदि आप सामान्य put अनुरोध पर देखते हैं तो यह परम के साथ एक फॉर्म से post है। तो यह थोड़ा सा हैक लेकिन यह काम पूरा हो जाता है।

इसके अलावा, आपको यह सुनिश्चित करना होगा कि जब आप redirect_post पर कॉल करते हैं तो आपके हैश के मान स्ट्रिंग होते हैं अन्यथा त्रुटियां फेंक दी जाएंगी।

+1

'नियंत्रक.प्रोसेस 'अब रेल में काम नहीं करता है 4 – josal

1

आप किसी भिन्न पृष्ठ पर रीडायरेक्ट कर सकते हैं जो क्लाइंट, using Javascript से पुट अनुरोध जारी करता है।

5

मुझे नहीं लगता कि आप ऐसा करने में सक्षम हैं, और मुझे संदेह है कि सीमा HTTP का हिस्सा है।

रीडायरेक्ट_to का उपयोग करते समय - पुनर्निर्देशन "302 संशोधित" शीर्षलेख के रूप में होता है जब तक अन्यथा पैरामीटर में निर्दिष्ट नहीं किया जाता है।

HTTP स्पेक पर नज़र डालने से ब्राउजर रीडायरेक्ट के माध्यम से अनुरोध के प्रकार को बदलने का कोई तरीका नहीं दिखाता है।

HTTP Redirects:

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

मुझे लगता है कि आपको इस कार्यक्षमता को प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग करने की आवश्यकता हो सकती है, या शायद आपके आवेदन में नियंत्रण के प्रवाह पर पुनर्विचार करना पड़ सकता है।

2

कार्रवाई जहां, रीडायरेक्ट बस कॉल कार्रवाई और प्रस्तुत करना तो जैसे टेम्पलेट की कोशिश कर रहे रूप में एक ही नियंत्रक में है:

def show 
    index 
    render :action => "index" 
end 

यदि ऐसा नहीं है, तो मैं नहीं जानता कि आप कैसे करते हो।

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

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