كيف يمكنني إنشاء ActiveRecord العلاقة إلى ActiveResource الكائن ؟
-
06-07-2019 - |
سؤال
دعونا نقول أنا أكتب المكتبة طلب شركة النشر من تطبيق الأشخاص.
حتى في مكتبتي التطبيق لدي
class Person < ActiveResource::Base
self.site = "http://api.people.mypublisher.com/"
end
والآن أريد أن متجر Article
s لكل Person
:
class Article < ActiveRecord::Base
belongs_to :person, :as => :author
end
أنا أتصور أن لدينا الجدول التالي في قاعدة البيانات الخاصة بي:
Articles
id (PK) | title (string) | body (text) | author_id (integer)
author_id
ليس بالضبط الأجنبية الرئيسية ، حيث لا يكون الناس في الجدول.أن يترك العديد من الأسئلة:
كيف أقول بلدي
Person
ActiveResource
وجوه أنهhas_many
Articles
?سوف
Articles.find(:first).author
العمل ؟ سوفbelongs_to
حتى العمل بالنظر إلى أنه لا يوجدActiveRecord
و لا دعم الطاولة ؟
المحلول
كما كنت أشير ، يتم إعطاء الكثير لأن ActiveResource لا يكون الجمعيات بمعنى أن ActiveRecord لا.
كنت قد وجدت بالفعل في جواب السؤال رقم 1.أما عن السؤال رقم 2 ، ActiveRecord نموذج المادة يجب أن تتصرف بشكل جيد فقط عندما يتم تكوين مع "belongs_to" الرابطة إلى ActiveResource نموذج.هذا هو Aritcle.تجد(:أول).الكاتب يجب أن تعود الشخص الكائن الذي تريد.
نصائح أخرى
أفترض إمكانية #1, على افتراض يمكنني الحصول على أي من ذلك ، هو أن تفعل هذا:
class Person < ActiveResource::Base
self.site = "http://api.people.mypublisher.com/"
def articles
Article.find(:all, :conditions => { :person_id => self.id })
end
def add_article(article)
article.person_id = self.id
end
end
لكنه يفقد الكثير ما has_many
يقدم.
أعتقد أن أفضل حل هو جعل أسلوب إرجاع نطاق.
class Person < ActiveResource::Base
self.site = ..
.
def articles
Article.for_person(self.id)
end
end
class Article < ActiveRecord::Base
named_scope :for_person, lambda { |pid| { :conditions => { :person_id => pid }}}
end