2012-04-02 14 views
13

में शामिल मैं तीन मॉडल है:नेस्टिंग: json रेल

render json: @as, :include => [:bs => [:include=>[:c]] 
:

class A < ActiveRecord::Base 
    has_many :bs 
end 

class B < ActiveRecord::Base 
    has_one :c 
    belongs_to :a 
end 

class C < ActiveRecord::Base 
    belongs_to :b 
end 

मैं json डेटा सभी बी की और एक ए के लिए सी युक्त मैं करने के लिए इसी तरह की बातों के एक नंबर की कोशिश की प्राप्त करना चाहते हैं

लेकिन कुछ भी काम नहीं करता है। ऐसा करने का एक अच्छा तरीका क्या होगा।

उत्तर

30

विकल्प आप render :json को पारित कर सकते हैं देखने के लिए ActiveModel::Serializers::JSON#as_json का संदर्भ लें की कोशिश करो। के शब्दों में:

संघों :include का उपयोग शामिल करने के लिए ...

द्वितीय स्तर और उच्च आदेश संघों के रूप में अच्छी तरह से काम:

user.as_json(:include => { :posts => { 
          :include => { :comments => { 
              :only => :body } }, 
          :only => :title } }) 
# => { "id": 1, "name": "Konata Izumi", "age": 16, 
#  "created_at": "2006/08/01", "awesome": true, 
#  "posts": [ { "comments": [ { "body": "1st post!" }, { "body": "Second!" } ], 
#     "title": "Welcome to the weblog" }, 
#     { "comments": [ {"body": "Don't think too hard" } ], 
#     "title": "So I was thinking" } ] 
# } 

यह to_json या as_json सीधे कॉल करने के लिए आवश्यक नहीं है , render :json के रूप में यह स्वचालित रूप से करता है।

+1

आप रेल 2 में फंस रहे हैं, 'प्रस्तुत करना() 'समर्थन नहीं करता है 'शामिल करें', लेकिन' to_json() 'करता है। उस स्थिति में, 'रेंडर कॉल करने के लिए यह समझ में आता है: json => @ as.to_json (: include =>: bs) '। –

+0

to_json कभी-कभी घोंसला संरचना –

+0

@ अल्बर्ट.किंग तोड़ते हैं यदि आपको कोई विशिष्ट समस्या हो रही है तो आपको इसे एक नए प्रश्न के रूप में पोस्ट करना चाहिए। –

2

render :json => @as.to_json(:include => {:bs => :c}) 
5

आप सरणी के बजाय हैश में पारित करने के लिए की जरूरत है

render :json => @as.to_json(:include => { :bs => {:include =>:c} }) 
0

इस प्रयास करें:

render json: @as.to_json(include:{bs: {include:{c:}}}) 
0

आज़माएं:

render json: @tiquets, :include => { :enterprise => {:include => { :location => {:only => :lo_name } },:only => :en_name } } } 
+0

@OwaisKureshi एक कोड-केवल उत्तर नहीं हो सकता है एक अच्छा है, लेकिन यह अभी भी एक जवाब है। मैं आपको इस पोस्ट को एलक्यूपीआरक्यू के बारे में सलाह दूंगा: [आप इसे गलत कर रहे हैं: कम गुणवत्ता वाले पदों में स्वच्छता के लिए एक याचिका] [http://meta.stackoverflow.com/questions/287563/youre-doing-it- गलत-एक-याचिका-के-से-कम-गुणवत्ता-पोस्ट-कतार) – FelixSFD

+0

@ फ़ेलिक्स एसएफडी, ठीक है, मैं सहमत हूं, लेकिन उत्तर को समझाते हुए कुछ पाठ होना चाहिए, या वह इसे टिप्पणी के रूप में पोस्ट कर सकता है? –

+0

@ ओवेसकुरेशी कोड की व्याख्या करने के लिए अनुशंसित और बेहतर है। लेकिन स्पष्टीकरण के बिना भी, यह एक जवाब है। – FelixSFD

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