القضبان الموارد متداخلة
-
21-08-2019 - |
سؤال
وأنا أحاول الحصول على رأسي حول الجمعيات المتداخلة في القضبان باستخدام ActiveResource. بلدي على سبيل المثال على النحو التالي: ما قلته هو المطار مع العديد من المدارج.
وبلدي عرض عمل في وحدة التحكم المطارات يحتوي على: airport = Airport.find (بارامس [: معرف])
عند أدعو HTTP: //localhost/airports/2.xml أن أحصل على قطعة من XML:
<airport>
<code>DUS</code>
<created-at type="datetime">2009-02-12T09:39:22Z</created-at>
<id type="integer">2</id>
<name>Duesseldorf</name>
<updated-at type="datetime">2009-02-12T09:39:22Z</updated-at>
</airport>
والآن، لقد غيرت عمل ل
@airport = Airport.find(params[:id], :include => :runways)
وكيف يمكنني تحقيق ذلك فوق تحميل فوق URL هو إعطائي شيئا مثل:
<airport>
<code>FRA</code>
<created-at type="datetime">2009-02-12T09:39:22Z</created-at>
<id type="integer">2</id>
<name>Frankfurt</name>
<updated-at type="datetime">2009-02-12T09:39:22Z</updated-at>
<runways>
<runway>
<id>1</id>
<name>bumpy runway</name>
</runway>
</runways>
</airport>
وعلى رأس ذلك: إذا كان لدي العميل مع
class Airport < ActiveResource::Base
..
end
و
class Runway < ActiveResource::Base
..
end
وكيف يمكنني الحصول عليه لتحميل جمعيات مثل تلقائيا:
a = Airport.find(1)
puts a.runways.length
=> 1
و(أخيرا وليس آخرا): هل هناك طريقة لتخزين البيانات من العميل مثل:
a = Airport.find(1)
a.runways << Runway.find(1)
a.save
وربما أنا حقا أعمى جدا، ولكن أنا عالقة ... أي فكرة هو موضع ترحيب بحرارة.
والشكر
ومات
المحلول
والخيار :include
لمكتشف يحدد أنه يجب جلب بشغف البنود ذات الصلة من قاعدة البيانات. يحدد الخيار :include
لto_xml
أنه ينبغي أن تدرج في تقديم XML.
وإذا تضمن تمثيل XML الكنسي الكائنات ذات الصلة، يمكنك تجاوز أسلوب to_xml
لتجعل حياتك أكثر بساطة قليلا:
class Airport
def to_xml(options={})
super(options.merge(:include => :runways))
end
end
وثم منذ render
سيدعو to_xml
إذا كنت لا، رمز وحدة التحكم الخاصة بك يمكن أن يكون ببساطة
format.xml { render :xml => @airport }
نصائح أخرى
وحلها نفسي في نهاية المطاف. لم يكن على علم لوضع التضمين في تقديم statememt:
def show
@airport = Airport.find(params[:id], :include => :runways)
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @airport.to_xml(:include => :runways) }
end
end