كيف يمكنني إنشاء ActiveRecord العلاقة إلى ActiveResource الكائن ؟

StackOverflow https://stackoverflow.com/questions/183604

سؤال

دعونا نقول أنا أكتب المكتبة طلب شركة النشر من تطبيق الأشخاص.

حتى في مكتبتي التطبيق لدي

class Person < ActiveResource::Base
  self.site = "http://api.people.mypublisher.com/"
end

والآن أريد أن متجر Articles لكل Person:

class Article < ActiveRecord::Base
  belongs_to :person, :as => :author
end

أنا أتصور أن لدينا الجدول التالي في قاعدة البيانات الخاصة بي:

Articles
id (PK) | title (string) | body (text) | author_id (integer)

author_id ليس بالضبط الأجنبية الرئيسية ، حيث لا يكون الناس في الجدول.أن يترك العديد من الأسئلة:

  1. كيف أقول بلدي Person ActiveResource وجوه أنه has_many Articles?

  2. سوف 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top