2016-05-02 7 views
6

आरएसपीईसी के माध्यम से डेटा का परीक्षण और परीक्षण करने के लिए पॉलिमॉर्फिक सीरियलाइज़र प्राप्त करने की कोशिश के साथ कुश्ती हो गई। बस 0.10+ActiveModelSerializers Polymorphic Json

मुझे यह पोस्ट मिला, जो मुझे बहुत समझ में आता है, और मुझे धारावाहिक बनाने में प्रवेश देता है, हालांकि, इसे पॉलिमॉर्फ के लिए करते समय, मुझे टाइप और आईडी को ठीक से नाम नहीं मिलता है (या परीक्षण मामले में - ASSET_ID देख सकते हैं और नेस्टेड ASSET_TYPE को)

{:id=>1, 
    :label=>"Today I feel amazing!", 
    :position=>0, 
    :status=>"active", 
    :media_container_id=>1, 
    :asset=> 
    {:id=>4 

Test ActiveModel::Serializer classes with Rspec

class MediaSerializer < ApplicationSerializer 
    attributes :id, 
      :label, 

    has_one :asset, polymorphic: true 
end 

मैंने देखा है कि परीक्षण भी ठीक से बहुरूपी पहचानकर्ता या तो (यानी ASSET_ID, ASSET_TYPE जोड़ने के लिए लग रहे हैं न की उम्मीद imageable_id, आईएमए geable_type)

https://github.com/rails-api/active_model_serializers/commit/045fa9bc072a04f5a94d23f3d955e49bdaba74a1#diff-c3565d7d6d40da1b2bf75e13eb8e6afbR36

मैं सीधे ऊपर MediaSerialzer.new (मीडिया जाते हैं) मैं .associations पर प्रहार कर सकते हैं, लेकिन मैं नहीं कर सकते उन्हें जैसे मैं एक पूर्ण पेलोड

पैदा किया गया था प्रस्तुत करने के लिए प्राप्त करने के लिए लग रहे हैं

डॉक्स https://github.com/rails-api/active_model_serializers

serializer_options = {} 
serializer = SomeSerializer.new(resource, serializer_options) 
serializer.attributes 
serializer.associations 

से इम यकीन है कि इम लापता कुछ/कुछ गलत कर - किसी भी मार्गदर्शन बहुत अच्छा होगा।

धन्यवाद

उत्तर

1

यह प्रभाव आप देख रहे हैं पाने के लिए आसान नहीं है, लेकिन यह संभव है।

आप associations विधि को ओवरराइड करके धारावाहिक द्वारा उत्पन्न हैश तक पहुंच सकते हैं।

class MediaSerializer < ApplicationSerializer 
    attributes :id, 
      :label, 

    has_one :asset, polymorphic: true 

    def associations details 
    data = super 
    data[:asset] = relabel_asset(data[:asset]) 
    data 
    end 

    def relabel_asset asset 
    labelled_asset = {} 
    asset.keys.each do |k| 
     labelled_asset["asset_#{k}"] = asset[k]; 
    end 
    labelled_asset 
    end 
end 

मैंने इस पर लटका पाने के लिए ActiveModelSerializer के बारे में बहुत कुछ सीखा! मैं विषय पर रयान बेट्स 'पॉडकास्ट करने के लिए भेजा:

http://railscasts.com/episodes/409-active-model-serializers

वहाँ में उन्होंने बताता है कि कैसे आप attributes विधि ओवरराइड और super फोन serializer द्वारा उत्पन्न हैश तक पहुँच प्राप्त कर सकते हैं। मैंने अनुमान लगाया कि मैं आपकी पोस्ट में उल्लिखित associations विधि के लिए एक ही चाल कर सकता हूं। वहां से सभी चाबियों को बदलने के लिए रूबी का थोड़ा सा हिस्सा लगता है, लेकिन, यदि मुझे सही ढंग से समझ में आया है कि आपको क्या चाहिए, तो यह तकनीकी रूप से संभव है।

आशा है कि मदद करता है!