CD表看起來是這樣的:導軌和查找表的關聯,有一個兩列的主鍵
cd.dogtag (primary key)
...
cd_tracks
有id
和tracks
(曲目名稱),例如:
1 Turd On The Run
cd_tracks2title
是從CD表和cd_tracks
表中加入多對多的查找表。但它也包含了信息,我想:
cd_tracks2title.dogTag
cd_tracks2title.trackId
cd_tracks2title.duration
cd_tracks2title.position
爲cd_tracks2title
的主鍵實際上是在2列:
PRIMARY KEY (`dogTag`,`trackId`)
而且裏面的數據cd_tracks2title
可能是這樣的:
1 4 NULL NULL 3:24 11
問題是我試圖從CD表建立一個Rails關聯到cd_tracks2title使用這2個主要列,但似乎沒有辦法。
如果我這樣做:
# cd_track.rb
has_and_belongs_to_many :cd, :join_table => 'cd_tracks2title', :foreign_key => 'trackId', :association_foreign_key => 'dogTag'
#cd.rb
has_and_belongs_to_many :cd_track, :join_table => 'cd_tracks2title', :foreign_key => 'dogTag', :association_foreign_key => 'trackId'
這很好,我可以用類似Cd.first.cd_track
得到曲目的名字,但我沒有辦法讓cd_tracks2title.duration
和cd_tracks2title.position
信息,因爲它是一個簡單的查找表。
理想情況下,我會同時使用cd.dogTag
和cd_tracks.id
值,以獲得正確的保持這種關聯,所以我仍然可以得到的曲目名稱,但需要從CD表到cd_tracks2title
表另一個關聯,通過cd_tracks
表信息。
當然,我曾經通過明確寫出查詢中的Mysql JOIN來完成所有這些工作,但是我想創建Rails關聯。
真的,沒辦法做到這一點?甚至沒有寶石? – kakubei 2012-09-12 15:33:56