2011-01-05 15 views
2

Ich bin ein Anfänger mit Rails 3 Programmierung und ich habe ein Problem mit der Erstellung des richtigen Modells.HABTM Beziehung mit einem Array

Angenommen, es gibt eine Anwendung zum Verwalten der Bibliografie eines Buchs, die die Zuordnung für jedes Kapitel der Liste referenzierter Artikel verwaltet. Also für den Artikel ist Teil ich so etwas haben könnte:

create_table :articles do |t| 
    t.string :title 
    t.text :content 
    ... 

Auf der Literaturseite würde Ich mag ein Modell haben, wie

create_table :bibliographies do |t| 
    t.string :chapter 
    t.text :ref 
    ... 

wo ref tatsächlich eine Reihe von Referenzen zu Artikeln ist, so Es würde über serialize ActiveRecord-Methode verwaltet werden.

Ok, so ist jetzt das Problem, wie man so macht, dass die Elemente des Arrays @bibliography.ref Verweise (in Ruby Sinn) auf mehrere article_id sind.

Wie modelliere ich eine solche Beziehung, und welchen Rails 3-Code soll ich schreiben, um das auszudrücken? Die Sache, die mich verwirrt, ist, dass ein einzelnes Feld einer einzelnen Instanz von @bibliography auf viele @ article.id verweisen würde.

Vielen Dank im Voraus

+0

Was ist der Punkt, der die Serialisierung der Fremdschlüssel verknüpft ti die Artikel? Warum benutzt du nicht den normalen Alltag? Ich verstehe wirklich nicht, sorry – apneadiving

Antwort

4

Wenn Sie wirklich so speichern Beziehungen wollen, dann würde ich eine Methode in Bibliographie Modell, so etwas wie diese (ist das ref Angenommen ein Array von ids)

definiert

def articles 
    Article.where(:id => self.ref) 
end 

würde ich die Beziehung speichern anders though. Fügen Sie eine dritte Tabelle/ein neues Modell articles_bibliographies mit den Feldern article_id und bibliography_id hinzu. Dann können Sie die Verknüpfung has_many: through verwenden, die in ActiveRecord integriert ist.

in Ihrer Bibliographie Klasse würden Sie dann so etwas wie haben:

has_many :articles_bibliographies 
has_many :articles, :through => :articles_bibliographies 

dann können Sie @ bibliography.articles tun nur

mehr hier lesen http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

+0

Danke, ich habe die Möglichkeit nicht ausgeschlossen, has-many-through-Beziehung zu verwenden, so weit ich mein Array behalten kann :) also werde ich daran arbeiten, das zu implementieren. – bitwelder

0

Egze Vorschlag folgend, fand ich ein Möglichkeit, mein Problem zu lösen (ohne Arrays zu verwenden!). Also, ich habe eine has_many-through-Beziehung, aber wie ich die Bestellung für die Artikel speichern möchten, wie sie in der Bibliographie erwähnt werden, hat die Tabelle articles_bibliographies auch eine order_nr Feld, wo ich speichern, die die erste, zweite ist etc. Artikel erwähnt in der Bibliographie:

create_table :articles_bibliographies do |t| 
    t.references :article 
    t.references :bibliography 
    t.integer  :order_nr 

auf diese Weise ich eine geordnete Liste von Elementen mit und zeigen abrufen können:

@bibliography.articles.order("order_nr ASC") 
Verwandte Themen