2012-09-26 7 views
7

मैं एक API ऐसा दिखता है जैसे है कि एक तीसरे पक्ष के पुस्तकालय से डेटा हड़पने के लिए कोशिश कर रहा हूँ "users.json"। क्या यह संभव है?ActiveResource एक आरईएसटी एपीआई से संसाधन कैसे प्राप्त करें जिसमें एकवचन नाम है?</p> <p><code>https://foo.com/user.json?username=<USERNAME></code></p> <p>मैं समझ नहीं कैसे "user.json" का उपयोग करने के बजाय करने के लिए मजबूर करने के लिए ActiveResource:

मुझे इसे reactive_resources मणि के साथ काम करना पड़ा ... क्या यह केवल शुद्ध सक्रिय स्रोतों में ऐसा करने का कोई तरीका है?

उत्तर

8
class User < ActiveResource::Base 
    self.element_name = "user" 
end 

इसके बाद, आप कैसे यूआरएल जो ActiveResource को लग रहा है //foo.com/user/.json

के बजाय //foo.com/user.json किए जाने से एक तत्व प्राप्त करने के लिए पूछने के लिए जा रहे हैं टिप्पणी करने के लिए जवाब में
User.find(:one, :from => "https://foo.com/user.json?username=#{<USERNAME>}" 

संपादित

वहाँ हर बार मैं) का उपयोग करना (चाहते हैं अनुरोध के पूर्ण URL दर्ज किए बिना ऐसा करने के लिए कोई तरीका है?

एक तरीका है कक्षा में एक विधि को आपके लिए पूर्ण यूआरएल करने के लिए परिभाषित करना।

class User < ActiveResource::Base 
    self.element_name = "user" 

    def self.find_by_username(username) 
    find(:one, :from => "https://foo.com/user.json?username=#{username}" 
    end 

    def find 
    self.class.find(:one, :from => "https://foo.com/user.json?username=#{username}" 
    end 
end 

element_path को फिर से परिभाषित करने का एक और तरीका है।

class User < ActiveResource::Base 
    self.element_name = "user" 

    def self.element_path(id, prefix_options = {}, options = {}) 
    "https://foo.com/user.json?username=#{prefix_options["user_id"]}" 
    end 
end 

कुछ इस बंदर-पैचिंग को कॉल करेंगे, अन्य इसे ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग कहते हैं। मैं कहता हूं कि जब आप कोड में जा रहे हैं या बेस व्यवहार को बदलने के लिए रूबी की गतिशील प्रकृति का उपयोग कर रहे हैं तो यह केवल बंदर-पैचिंग है और यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में चीजों को करने का एक पूरी तरह से वैध तरीका है। हालांकि, रूबी समुदाय ओओपी का अधिक उपयोग नहीं करता है, बहुत अधिक लूसर (और कम अच्छी तरह से व्यवहार) मिश्रण-इन्स के पक्ष में विरासत को अनदेखा करता है, और केवल पॉलिमॉर्फिज्म के लिए बतख-टाइपिंग का उपयोग करता है।

एक्टिव रिसोर्स के साथ गड़बड़ करने वाले मुद्दों को एक यूआरएल बनाने के लिए जहां आप ActiveResource सम्मेलनों को स्वीकार करने के लिए वेब सेवा को फिर से परिभाषित नहीं कर सकते हैं, इसलिए कई लोग HTTParty का उपयोग क्यों कर रहे हैं। "। आप URL के निर्माण के लिए है, तो साथ ही HTTParty का उपयोग कर सकते"

+0

वहाँ एक रास्ता है प्रत्येक बार जब मैं ढूंढना चाहता हूं अनुरोध के पूर्ण यूआरएल दर्ज किए बिना ऐसा करने के लिए()? –

+0

आपने इसके लिए पूछा। उत्तर संपादित किया गया। –

+1

यूआरएल के पहले भाग को लिखने के लिए आप 'साइट' और' उपसर्ग 'का भी उपयोग कर सकते हैं। – funwhilelost

2

आप केवल URL में संसाधन नाम pluralization से छुटकारा पाने की जरूरत है, collection_name ओवरराइड:

class User < ActiveResource::Base 
    self.element_name = "user" 

    def self.collection_name 
    element_name 
    end 
end 
संबंधित मुद्दे