2011-01-05 59 views
2

我是Rails 3編程的初學者,我在創建正確的模型時遇到了一個問題。HABTM與數組的關係

比方說,有一個應用程序來管理書籍的參考書目,即管理參考文章列表中每個章節的映射。所以對於文章部分 我能有這樣的:

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

在參考書目方面,我想有一個像

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

一個模型,其中ref實際上是對文章的引用數組,因此它將通過serialize ActiveRecord方法進行管理。

好的,所以現在的問題是如何使數組@bibliography.ref的元素是引用(在Ruby意義上)到幾個article_id

我該如何建模這樣的關係,以及我應該寫什麼Rails 3代碼來表達它? 令我困惑的是@bibliography的單個實例的單個字段會引用許多@ article.id。

在此先感謝

+0

什麼是序列化有關TI的文章外鍵的意義呢?你爲什麼不使用正常的habtm方式?我真的不明白,對不起 – apneadiving 2011-01-05 15:03:52

回答

4

如果你真的想保存這樣的關係,那麼我會這樣定義參考書目模型的方法,一些

(假設裁判是一組ID)

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

雖然我會保存關係。用article_id和bibliography_id字段添加第三個表/模型articles_bibliographies。然後,您可以使用內置於ActiveRecord中的has_many:through關聯。

在你的參考書目類

,那麼你會碰到這樣的:

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

那麼你可以做@ bibliography.articles

在這裏閱讀更多http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

+0

謝謝,我沒有排除使用has-many-through關係的可能性,至少我可以保留我的數組:),所以我會研究如何實現它。 – bitwelder 2011-01-06 14:03:08

0

繼egze的建議下,我找到了解決我的問題的方法(不使用數組!)。 所以,我創建的has_many通的關係,但我想保存它們是如何在參考書目中提到的 文章的順序,表articles_bibliographies 也有order_nr場,在那裏我存儲這是第一,第二等文中提到的書目 :

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

這樣我可以檢索和顯示的元素的有序列表:

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