2010-09-08 5 views
24

कोडरेल 3 में, answer_to और format.all रेल 2 की तुलना में अलग-अलग काम करता है?

respond_to do |format| 
    format.html 
    format.json { render :json => @switches } 
    format.xml { render :xml => @switches.to_xml } 
    format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." } 
end 

ऊपर रेल 2.2.2 में काम करेंगे। लेकिन रेल 3 में, ब्राउज़र पर नियंत्रक/index.html या अनुक्रमणिका प्राप्त करने दोनों अंतिम पंक्ति में आ जाएंगे: "इस समय केवल HTML और JSON प्रारूप समर्थित हैं।"

केवल रेल डॉक मैं इस पर पा सकते हैं

http://api.rubyonrails.org/classes/ActionController/MimeResponds/ClassMethods.html#method-i-respond_to

जो वर्तमान केवल राज्यों है:

respond_to :html, :xml, :json 

लेकिन वे json और xml के लिए अलग टेम्पलेट्स की जरूरत है, और संभाल सकते हैं "इस समय" केवल HTML और JSON प्रारूप समर्थित हैं "केस।

उत्तर

3

आप इसे उपयोगी Railscasts के इस प्रकरण है, जो रेल 3 में और प्रत्युत्तर वर्ग में परिवर्तन विशेष रूप से नियंत्रकों में परिवर्तन दिखाता है देखने के लिए (नियंत्रक वर्ग अपने आप में respond_to डालने और केवल में respond_with @object का उपयोग कर प्राप्त कर सकते हैं कार्रवाई):

http://railscasts.com/episodes/224-controllers-in-rails-3

43

rails3 में आप लिखना होगा:

respond_with(@switches) do |format| 
    format.html 
    format.json { render :json => @switches } 
    format.xml { render :xml => @switches } 
    format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." } 
end 

लेकिन यह केवल पत्राचार में एक respond_to ब्लॉक के साथ काम करता है fil के शीर्ष पर ई, अपेक्षित प्रारूपों का विवरण। जैसे

respond_to :xml, :json, :html 

यहां तक ​​कि उस मामले में, अगर उदाहरण के लिए किसी को भी js प्रारूप पूछता है, any ब्लॉक शुरू हो रहा है।

@switches = ... 
respond_to do |format| 
    format.html {render :text => 'This is html'} 
    format.xml {render :xml => @switches} 
    format.json {render :json => @switches} 
    format.all {render :text => "Only HTML, JSON and XML are currently supported"} 
end 

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

ही आप अभी भी respond_to अकेले, इस प्रकार इस्तेमाल कर सकते हैं।

+0

मुझे लगता है कि to_xml कॉल अनिवार्य है। डिफ़ॉल्ट रेल 3 उत्तरदाता को इसे स्वचालित रूप से कॉल करना चाहिए। – dogenpunk

+1

प्रारूप। मेरे पास प्रारूप के समान प्रारूप है। मेरे लिए। क्या यह संभवतः प्रासंगिक है: http://blogs.thewehners.net/josh/posts/354-obscure-rails-bug-respond_to-formatany – dreeves

+0

@dogenpunk: यह बिल्कुल सही है। मैंने इसे दिखाने के लिए अपना जवाब संपादित किया। मैंने एक शुद्ध 'answer_to' उदाहरण भी जोड़ा (और स्पष्टीकरण जोड़ा)। @dreeves: मेरे लिए यह सिर्फ काम करता है, आपके द्वारा उल्लेख किया गया ब्लॉगपोस्ट रेल-शब्द में प्राचीन है :) – nathanvda

0

मेरे लिए निम्नलिखित कार्य करता है। मेरा मानना ​​है कि आपको स्पष्ट रूप से एचटीएमएल के लिए "रेंडर" भाग निर्दिष्ट करना होगा या यह प्रारूप का उपयोग करेगा।

respond_to do |format| 
    format.html { render :html => @switches } 
    format.json { render :json => @switches } 
    format.xml { render :xml => @switches } 
    format.all { render :text => "we only have html, json, and xml" } 
end