2010-01-22 9 views
6

अब तक मैं हमेशा एक responds_to ब्लॉक का उपयोग कार्यों के लिए प्रतिक्रिया का स्वरूप निर्दिष्ट किया है, इसलिए जैसे:हमेशा answers_to का उपयोग करें?

responds_to do |format| 
    format.js { render :json => @record } 
end 

हाल ही में मैंने महसूस किया कि आप केवल (ऊपर के उदाहरण के रूप में) एक प्रारूप का समर्थन करता है, तो, आप डॉन वास्तव में उस ब्लॉक की जरूरत नहीं है। क्या इसे छोड़ने या इसे हटाने का सबसे अच्छा अभ्यास है?

उत्तर

2

मैं answers- मौजूदा साथ अलग करने के लिए जा रहा हूँ:

render :json => @record 

ज्यादा से ज्यादा संक्षिप्त है मुझे अपने सभी कार्यों के लिए responds_to ब्लॉक होना पसंद है। मुझे लगता है कि, थोड़ी अधिक वर्बोज़ के दौरान, यह अधिक स्पष्ट रूप से कार्रवाई को स्वयं दस्तावेज करता है। यह भविष्य में अतिरिक्त प्रारूपों का समर्थन करना भी आसान बनाता है। संपादित करें: एक और फायदा यह है कि यह एक द्वारपाल के रूप में कार्य करता है। ब्लॉक में घोषित कोई प्रारूप स्वचालित रूप से "406 स्वीकार्य नहीं है"

+0

द्वारपाल विचार के बारे में सोचा नहीं था, अच्छा है। –

+0

यह मामला है कि मेरे उदाहरण में एक अनुरोध के ऊपर (HTML के लिए, .js के बिना) को 406 मिलेगा और सही हेडर के बिना केवल रिकॉर्ड जेसन मिलेगा? यदि ऐसा है तो यह बहुत बड़ा है ... – tfwright

+0

हां, उपरोक्त आपके 'responds_to' ब्लॉक के साथ, .xml, .html आदि के लिए अनुरोध' 406 स्वीकार्य नहीं 'लौटाएगा। – Ben

0

मुझे सच में यकीन नहीं है कि यह सबसे अच्छा अभ्यास है या नहीं, लेकिन आम तौर पर मुझे क्या करना है, यह है कि मैं उत्तर देने के लिए मार्गों को छोड़ने के लिए छोड़ देता हूं (यानी .:format अंत में जोड़कर), लेकिन केवल नियंत्रकों में इसका उपयोग करें जब यह जरूरी है।

उदाहरण:

routes.rb

map.connect :controller/:action/:id.:format 

model_controller.rb

# Return a collection of model objects 
def action_with_multiple_responses 
    @models = Model.all 

    respond_to do |format| 
    format.html #=> action_with_multiple_responses.html 
    format.xml { render :xml => @models } 
    end 
end 

# Return the first model object 
def action_with_one_response 
    @model = Model.first 
end 

इस तरह, आप एक अनावश्यक ब्लॉक के साथ अपने action_with_one_response विधि को अव्यवस्थित नहीं कर रहे हैं , लेकिन यदि आप चाहें तो आपने खुद को बहुत अच्छी तरह से स्थापित कर लिया है किसी दिन xml, json, आदि में अपनी ऑब्जेक्ट वापस करें

+0

मेरा मानना ​​है कि प्रारूप डिफ़ॉल्ट रूप से जोड़ा जाता है। – vise

+1

यह है कि यदि आप 'map.resources' का उपयोग करते हैं, लेकिन मुझे विश्वास नहीं है कि यह है कि आप केवल' map.connect' का उपयोग करें - कम से कम, यह मेरा अनुभव रहा है (जब तक कि मैं कुछ और गलत नहीं कर रहा हूं)। – jerhinesmith

+0

हाँ, map.resources निर्दिष्ट नियंत्रक से जुड़े RESTful मार्गों का एक छत सेट करेगा। कनेक्ट प्रारूप में एक विशिष्ट पथ सेट कनेक्ट करें। –

0

मैं तब तक प्रतिक्रिया का उपयोग नहीं करना चाहूंगा जब तक कि आपके पास एकाधिक प्रतिक्रिया प्रकार न हों।

यह बस अतिरिक्त समझने के लिए अपने अनुप्रयोग पर कार्रवाई करने के लिए और कोड और संभाल है:

responds_to do |format| 
    format.js { render :json => @record } 
end 
संबंधित मुद्दे