के साथ एपीआई संस्करण को कार्यान्वित करने का सही तरीका मुझे पता है कि पहले से ही कुछ प्रश्न हैं और this is a open issue regarding AMS not handling namespaces too efficiently (जो इस संस्करण दृष्टिकोण द्वारा उपयोग किया जाता है) लेकिन मैं यह सुनिश्चित करना चाहता था कि मैं वर्तमान बाधाओं के भीतर सही रास्ते में हूं।सक्रिय_model_serializers
# config/initializers/active_model_serializer.rb
ActiveModelSerializers.config.serializer_lookup_enabled = false
निष्क्रिय करने के लिए डिफ़ॉल्ट serializer देखने (जो वैसे भी काम नहीं किया);:
अभी मैं रेल 5 और एम्स 0.10.1 उपयोग कर रहा हूँ, इसलिए मैं निम्नलिखित किया और
# app/controllers/application_controller.rb
class ApplicationController < ActionController::API
def get_serializer(resource, options = {})
unless options[:each_serializer] || options[:serializer] then
serializer = (self.class.name.gsub("Controller","").singularize + "Serializer").constantize
resource.respond_to?(:to_ary) ? options[:each_serializer] = serializer : options[:serializer] = serializer
end
super(resource, options)
end
end
ओवरराइड करने के लिए डिफ़ॉल्ट रूप से serializers कैसे पाए जाते हैं; मेरी नियंत्रकों और serializer इस तरह हैं:
# app/controllers/api/v2/api_controller.rb
module Api::V2
class ApiController < ApplicationController
...
# app/controllers/api/v2/users_controller.rb
module Api::V2
class UsersController < ApiController
...
और
# app/serializers/api/v2/user_serializer.rb
module Api::V2
class UserSerializer < ActiveModel::Serializer
...
अब, ActiveModel::Serializer.serializer_for(object)
तरह बातें काम नहीं करेगा, तो मैं भी बंदर एपीआई संस्करण स्थापित करने के लिए example.metadata[:api_version]
का उपयोग कर मेरे अनुरोध चश्मा पैच करने के लिए किया था प्रत्येक परीक्षण से पहले और बढ़ने और त्रुटि अगर उदाहरण ने इसे सेट नहीं किया है।
तो:
- वहाँ एक बेहतर तरीका दस्तावेज है?
- क्या यह सही होने के करीब है?
- क्या मुझे इस दृष्टिकोण के साथ समस्या का सामना करना पड़ेगा?
- इसे कैसे सुधारया जा सकता है?
आपके इनपुट के लिए धन्यवाद! मैंने कुछ चीजों को कम करने के लिए ऐसा किया है। 'get_serializer' हमेशा एएमएस द्वारा बुलाया जाता है और मुझे केवल' रेंडर जेसन: @object, serializer: नेमस्पेस्ड :: अपरंपरागत :: ऑब्जेक्टसेरियलाइज़र 'का उपयोग करने की आवश्यकता होती है, यदि यह परिभाषित सम्मेलन का पालन नहीं करता है। –