2012-02-24 42 views
0

我想用創建以下車型「的has_many:通過」:實現一個的has_many:通過

class Contract < AR::Base 
    has_many :clientlines 
    has_many :codelines 
    has_many :clients, :through => :clientlines 
    has_many :codes, :through => :codelines 
end 

class clientlines < AR::Base 
    belongs_to :contract 
    belongs_to :client 
end 

class Client < AR::Base 
    has_many :clientlines 
    has_many :contracts, :through => :clientlines 
end 

class codeline < AR::Base 
    belongs_to :contract 
    belongs_to :code 
    units_alloc -------**I would like to add this attribute after this intermediate 
end     has been created? 

class Code < AR::Base 
    has_many :codelines 
    has_many :contracts, :through => :codelines 
end 

不要我先建立模型的軌道產生合同範本authnum:字符串,CLIENT_ID:整數,例如,「st_date:date,end_date:date」。 然後在遷移之前填寫所有關聯?

另外,我的理解是,所有的連接表是在使用has_many:through關聯時由rails自動創建的。這是什麼時候發生的?

最後,如**所示,我可以在代碼行中使用此屬性嗎?是否創建'rails generate migration add_units_alloc_to_codelines units_alloc:number'以將此屬性添加到連接表中?我還想知道如何將數字聲明爲小數點後兩位?

如果您有時間和傾向,請您評論我爲我的數據庫提出的設計?

謝謝。

回答

0
  1. 使用has_many :through您使用的是第三種模式,使其他兩個之間的連接,使軌道不會自動建立一個模型,你自己來建立和引用外鍵的其他兩款車型。

  2. 不要以複數命名模型,總是單數。如果你不能在單一他們的名字,你就錯了

  3. 在其中創建模型的順序不應該的問題太多(鐵軌產生一些遷移,你可以很容易地在以後修改)

  4. units_alloc屬性,只要將它添加到模型當你創建它,就這麼簡單!

  5. 爲2位小數在遷移使用類似t.decimal :amount, :precision => 6, :scale => 2(這個例子給你6位和2位小數)

  6. 閱讀Rails Guides,它會真正幫助你獲得了很多的麻煩

+0

謝謝@Andrei S,所以我需要創建代碼行和客戶端模型,並引用contract_id和client_id? – thomasvermaak 2012-02-24 20:14:03