Wie kann ich eine Active Beziehung zu einem Active Objekt erstellen?
-
06-07-2019 - |
Frage
Lassen Sie sich sagen, ich bin eine Library-Anwendung für einen Verlag zu schreiben, die bereits eine Anwendung Personen haben.
So in meiner Library-Anwendung Ich habe
class Person < ActiveResource::Base
self.site = "http://api.people.mypublisher.com/"
end
und jetzt will ich Article
s für jeden Person
speichern:
class Article < ActiveRecord::Base
belongs_to :person, :as => :author
end
Ich stelle mir vor ich die folgende Tabelle in meiner Datenbank haben würde:
Articles
id (PK) | title (string) | body (text) | author_id (integer)
author_id
ist nicht gerade ein Foreign-Key, da ich keinen Menschen Tisch. Das lässt einige Fragen:
-
Wie kann ich feststellen, meinem
Person
ActiveResource
Objekt, dass eshas_many
Articles
? -
Wird
Articles.find(:first).author
Arbeit? Wird auch gegebenbelongs_to
arbeiten, dass es keineActiveRecord
und keine Unterstützung Tabelle?
Lösung
Wie Sie weisen darauf hin, Sie geben viel, weil Active im Sinne keine Assoziationen haben, dass Active tut.
Sie haben bereits die Antwort # 1 zu hinterfragen. Wie bei Frage # 2, sollte Ihr Active Modell Artikel verhalten sich gut, wenn mit einem „belongs_to“ Vereinigung zu einem Active Modell konfiguriert. Das heißt Aritcle.find (: first) .author sollte die Person, Objekt zurückgeben Sie wollen.
Andere Tipps
ich eine Möglichkeit nehme an, für # 1, vorausgesetzt, ich kann irgendetwas davon bekommen arbeiten, ist dies zu tun:
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
Aber es verliert ein Los , was has_many
Angebote.
Ich denke, eine bessere Lösung wäre, ein Verfahren werden machen, die einen Umfang zurück.
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