किसी दिए गए नियंत्रक कार्रवाई के लिए, #respond_with क्लाइंट द्वारा अनुरोध किए गए माइम-प्रकार के आधार पर उचित प्रतिक्रिया उत्पन्न करता है।
विधि सिर्फ एक संसाधन के साथ कहा जाता है, तो इस उदाहरण में -
class PeopleController < ApplicationController
respond_to :html, :xml, :json
def index
@people = Person.all
respond_with @people
end
end
तो प्रतिक्रिया की माइम-प्रकार आम तौर पर अनुरोध के स्वीकार करें शीर्षक और घोषित उपलब्ध प्रारूपों के सेट के आधार पर चयन किया जाता है पिछले कॉल द्वारा नियंत्रक की क्लास विधि answer_to पर। वैकल्पिक रूप से माइम-प्रकार को नियंत्रक में request.format को स्पष्ट रूप से सेट करके चुना जा सकता है।
यदि स्वीकार्य प्रारूप की पहचान नहीं की जाती है, तो एप्लिकेशन '406 - स्वीकार्य नहीं' स्थिति देता है। अन्यथा, डिफ़ॉल्ट प्रतिक्रिया वर्तमान कार्रवाई और चयनित प्रारूप के नाम पर एक टेम्पलेट प्रस्तुत करना है, उदा। index.html.erb। यदि कोई टेम्पलेट उपलब्ध नहीं है, तो व्यवहार चयनित प्रारूप पर निर्भर करता है:
एचटीएमएल प्रतिक्रिया के लिए - यदि अनुरोध विधि प्राप्त होती है, तो अपवाद उठाया जाता है लेकिन प्रतिक्रिया के बाद अन्य अनुरोधों के लिए संसाधन पर कोई निर्भर करता है या नहीं सत्यापन त्रुटियां (यानी यह मानते हुए कि संसाधन को बचाने के लिए एक प्रयास किया गया है, उदाहरण के लिए एक निर्माण कार्रवाई द्वारा) -
यदि कोई त्रुटि नहीं है, यानी संसाधन सफलतापूर्वक सहेजा गया था, तो प्रतिक्रिया संसाधन को संसाधन यानी इसकी शो क्रिया ।
यदि सत्यापन त्रुटियां हैं, तो प्रतिक्रिया एक डिफ़ॉल्ट कार्रवाई प्रदान करती है, जो है: पोस्ट अनुरोध के लिए नया या: पैच या डाल के लिए संपादित करें।
इस प्रकार इस तरह एक उदाहरण -
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
flash[:notice] = 'User was successfully created.'
format.html { redirect_to(@user) }
format.xml { render xml: @user }
else
format.html { render action: "new" }
format.xml { render xml: @user }
end
end
end
एक जावास्क्रिप्ट अनुरोध के लिए - -
respond_to :html, :xml
def create
@user = User.new(params[:user])
flash[:notice] = 'User was successfully created.' if @user.save
respond_with(@user)
end
बराबर है, के लिए है, create.html.erb के अभाव में यदि टेम्पलेट नहीं है पाया, एक अपवाद उठाया गया है।
अन्य अनुरोधों के लिए - यानी डेटा प्रारूप जैसे कि एक्सएमएल, जेसन, सीएसवी इत्यादि, अगर संसाधन को उत्तर देने के साथ पास किया गया है, तो विधि का अनुरोध सीधे अनुरोधित प्रारूप में संसाधन प्रस्तुत करने का प्रयास करता है, उदाहरण के लिए। एक एक्सएमएल अनुरोध के लिए, प्रतिक्रिया xml: संसाधन को रेंडर करने के बराबर है।
तो विधि के बाहर 'respond_to' अर्थहीन है यदि कोई भी तरीका' respond_with' 'कहता है? – GMA
दूसरे शब्दों में आपको answer_with विधि के साथ एक जोड़ी में क्लास विधि answer_to का उपयोग करना चाहिए या कार्रवाई विधि में ब्लॉक के साथ example method answer_to का उपयोग करना चाहिए। – SergeyKutsko