2011-01-03 11 views
26

में संबंधित ऑब्जेक्ट शामिल करें मेरे पास एक नोट क्लास है जो उपयोगकर्ता से संबंधित है (यानी कोई उपयोगकर्ता कई नोट्स बना सकता है)।रेल: JSON आउटपुट

मेरे नोट नियंत्रक

class NotesController < ApplicationController 
    before_filter :authenticate_user! 
    respond_to :html, :xml, :json 

    # GET /notes 
    # GET /notes.xml 
    def index 
    @notes = Note.includes(:user).order("created_at DESC") 
    respond_with @notes 
    end 

जब मैं उदाहरण /notes.json JSON परिणाम में सूचकांक के लिए पूछने से

क्लिप, यह नोट देता है, लेकिन केवल उपयोगकर्ता ऑब्जेक्ट के लिए user_id देता है। मैं इसे user.username भी शामिल करना चाहता हूं (और उत्सुक होगा कि पूरे उपयोगकर्ता ऑब्जेक्ट को कैसे एम्बेड किया जाए)।

बोनस प्रश्न: मुझे कॉलम शो को author_id के रूप में दिखाने का कोई तरीका नहीं मिला और यह उपयोगकर्ता से संबंधित है। यदि यह करना आसान है, तो आप इसे कैसे करते हैं?

उत्तर

39

मुझे यकीन नहीं है कि नया respond_to/respond_with शैली ऐसा करने के लिए पर्याप्त लचीला है। यह बहुत अच्छा हो सकता है, लेकिन जहां तक ​​मैं समझता हूं, यह केवल सबसे सरल मामलों को सरल बनाना है।

आप ब्लॉक के साथ पुरानी शैली respond_to के साथ क्या करने का प्रयास कर रहे हैं, हालांकि, to_json पर पैरामीटर पास करके आप प्राप्त कर सकते हैं। कुछ इस तरह का प्रयास करें:

class NotesController < ApplicationController 
    def index 
    @notes = Note.order("created_at desc") 
    respond_to do |format| 
     format.json do 
     render :json => @notes.to_json(:include => { :user => { :only => :username } }) 
     end 
    end 
    end 
end 
+1

बिल्कुल सही! वह मुझे वहां ले गया जहां मुझे जाने की जरूरत थी। जैसा कि आपने दिखाया था, जेसन भाग को काम करने के बाद एचटीएमएल समर्थन में वापस जोड़ने में सक्षम था। – Codezy

+0

@ जिमी कुआद्रा: मेरे लिए बहुत उपयोगी काम किया। बहुत बहुत धन्यवाद। – Besi

-1

क्या यह दूसरी तरफ ऐसा करना संभव होगा?

def index 
    @user = User.includes(:notes).order("created_at DESC") 
    respond_with @user 
end 

यह उपयोगकर्ता शामिल करने के लिए महंगा हो सकता है हर बार @notes दोहराया है वस्तुओं।

+0

मैं उपयोगकर्ता नाम, जिसने उसे बनाया सहित सभी नोट प्राप्त करने की कोशिश कर रहा हूँ। यह मेरी समस्या को हल नहीं करने वाले सभी उपयोगकर्ताओं को वापस कर देगा। – Codezy

1

आप यह भी बहुत लचीला डेटा के साथ जवाबी कार्रवाई के लिए JBuilder (https://github.com/rails/jbuilder) का उपयोग कर सकते हैं।

@notes = Note.includes(:user).order("created_at DESC") 

और अपने index.json.jbuilder फ़ाइल में, आप कर सकते हैं

json.extract! @note 
json.username @note.user.username 
संबंधित मुद्दे