मुझे पता है कि दृश्य टेम्पलेट्स (एचटीएमएल, रैबल) का उपयोग करते समय, मुझे अपने नियंत्रक कार्रवाई में एक स्पष्ट रेंडर कॉल की आवश्यकता नहीं है क्योंकि डिफ़ॉल्ट रूप से, रेल टेम्पलेट को नियंत्रक क्रिया नाम से संबंधित नाम के साथ प्रस्तुत करता है। मुझे इस अवधारणा को पसंद है (मेरे नियंत्रक कोड में प्रतिपादन की परवाह नहीं है) और इसलिए आश्चर्य है कि यह ActiveModel :: Serializers का उपयोग करते समय भी संभव है?क्या ActiveModel :: Serializer को एक स्पष्ट रेंडर कॉल की आवश्यकता है?
उदाहरण के लिए, यह एक उत्पन्न नियंत्रक से कोड है (4.1.0 रेल):
class ProductsController < ApplicationController
before_action :set_product, only: [:show, :edit, :update, :destroy]
#other actions
# GET /products/1
# GET /products/1.json
def show
end
end
और इस serializer है:
class ProductSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :url, :quantity, :price
end
/products/1.json साधते, मैं करूंगा उम्मीद दो बातें होती हैं करने के लिए:
- फील्ड्स serializer में सूचीबद्ध नहीं ommited किया जाना है,
- पूरे JSON ऑब्जेक्ट को 'उत्पाद' शीर्ष स्तर फ़ील्ड में शामिल किया जाना है।
हालांकि, ऐसा नहीं होता है, पूरे धारावाहिक को अनदेखा किया जाता है। लेकिन फिर अगर मैं निम्नलिखित को दिखाएँ विधि को संशोधित:
# GET /products/1
# GET /products/1.json
def show
@product = Product.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @product }
end
end
और अब यह सब ठीक है, लेकिन मैं before_action फिल्टर के लाभ को खो दिया है (और यह है कि मैं कुछ बेमानी कोड है मुझे लगता है)।
यह वास्तव में कैसे किया जाना चाहिए?
@zmilojko क्या आपने ['respond_with'] (http://api.rubyonrails.org/classes/ActionController/MimeResponds.html#method-i-respond_with) का उपयोग करने का प्रयास किया है? मुझे लगता है कि 'respond_with (@product)' आपको बिल्कुल वही नहीं मिलेगा जो आप चाहते हैं। ['ActiveModel :: Serializer' README से उदाहरण] (https://github.com/rails-api/active_model_serializers#render-json)। –
@PaulFioravanti लेकिन यह वह नहीं है जो मैं बाद में हूं। मैं खाली रहने के लिए 'शो' विधि चाहूंगा क्योंकि रेल 4 जनरेटर इसे बनाता है, लेकिन अभी भी प्रश्न में परिभाषित सीरियलज़र का उपयोग करने में सक्षम होने के लिए (और जेबिल्डर नहीं, क्योंकि ऐसा लगता है कि रेल पसंद करेंगे)। – zmilojko
@zmilojko क्या यह एक सीधी रेल 4.1 ऐप है? या एक रेल-एपीआई ऐप? आप अपने ऐप की प्रारंभिक स्थिति कैसे बना रहे हैं? – noel