2012-11-12 12 views
5

मेरे पास मेरे नियंत्रक में latest कार्रवाई है। यह क्रिया सिर्फ अंतिम रिकॉर्ड पकड़ती है और show टेम्पलेट प्रस्तुत करती है।रेल 3 प्रतिक्रिया_with कस्टम टेम्पलेट

class PicturesController < ApplicationController 
    respond_to :html, :json, :xml 

    def latest 
    @picture = Picture.last 

    respond_with @picture, template: 'pictures/show' 
    end 
end 

क्या टेम्पलेट की आपूर्ति करने का कोई क्लीनर तरीका है? एचटीएमएल प्रारूप के लिए pictures/ भाग की आपूर्ति करने के लिए अनावश्यक लगता है क्योंकि यह साइट नियंत्रक है।

उत्तर

7

आप को रखना चाहते हैं टेम्पलेट, एक ही नियंत्रक के अंतर्गत आता है, तो आप इसे सिर्फ इस तरह लिख सकते हैं:

class PicturesController < ApplicationController 
    def latest 
    @picture = Picture.last 

    render :show 
    end 
end 

यह चित्र/पथ आवश्यक नहीं है। आप गहरी यहां जा सकते हैं: Layouts and Rendering in Rails

आप XML और JSON स्वरूपों को संरक्षित करने की जरूरत है, तो आप कर सकते हैं:

class PicturesController < ApplicationController 
    def latest 
    @picture = Picture.last 

    respond_to do |format| 
     format.html {render :show} 
     format.json {render json: @picture} 
     format.xml {render xml: @picture} 
    end 

    end 
end 
+2

** यह सही उत्तर है। ** ध्यान देने योग्य एक गोटो: कॉलिंग 'रेंडर' शो '* केवल शो टेम्पलेट प्रस्तुत करता है *, यह शो एक्शन को कॉल नहीं करता है। इसलिए, यदि आपके 'शो' एक्शन में इंस्टेंस वेरिएबल्स हैं जो शो टेम्पलेट की ज़रूरत है, तो आपको उन्हें 'शो' टेम्पलेट में प्रस्तुत करने वाली किसी भी अन्य क्रिया या किसी अन्य क्रिया में भी सेट करना होगा। – Andrew

+0

मेरे अपडेट देखें। मुझे इस क्रिया के लिए "एपीआई नेविगेशन" को संरक्षित करने की आवश्यकता है (जेएसओएन और एक्सएमएल प्रारूप)। मुझे पता है कि मैं एक ब्लॉक 'answer_with' दे सकता हूं और' format.html {प्रस्तुत करना: दिखाएं} 'कर सकता हूं। यह उतना साफ नहीं लगता है जितना कि यह होना चाहिए। – mikeycgto

+0

आप इसे कस्टम टेम्पलेट के लिए कैसे करते हैं, न कि जो पहले से बाकी कार्यों का हिस्सा है? किसी साझा फ़ोल्डर में कस्टम टेम्पलेट के बारे में कैसे? – ahnbizcad

5

मैं @Dario Barrionuevo को यह इसी तरह से किया है, लेकिन मैं एक्सएमएल & की रक्षा करने के लिए आवश्यक JSON स्वरूप और respond_to ब्लॉक करने से खुश नहीं थे, क्योंकि मैं respond_with उत्तरदाताओं का उपयोग करने का प्रयास कर रहा हूं। बाहर निकलता है आप यह कर सकते हैं।

class PicturesController < ApplicationController 
    respond_to :html, :json, :xml 

    def latest 
    @picture = Picture.last 

    respond_with(@picture) do |format| 
     format.html { render :show } 
    end 
    end 
end 

डिफ़ॉल्ट व्यवहार के रूप JSON & एक्सएमएल के लिए वांछित चलेंगे। आपको केवल एक ही व्यवहार निर्दिष्ट करना होगा जिसे आपको तीनों के बजाय ओवरराइड (HTML प्रतिक्रिया) की आवश्यकता है।

Source is here

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