0

CDテーブルは次のようになります。

cd.dogtag (primary key)
...

cd_tracks持っているidtracks(トラック名)、例:

1   Turd On The Run

cd_tracks2titleCDテーブルとテーブルから多対多を結合するためのルックアップテーブル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

問題は、これら2つのプライマリ列を使用してCDテーブルからcd_tracks2titleへのRailsの関連付けを確立しようとしていることですが、方法がないようです。

私がこれを行う場合:

# 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.durationcd_tracks2title.position

理想的には、トラック名を取得できるようにこの関連付けを保持しますが、正しい情報を取得するには、と値の両方を使用cd_tracks2titleするテーブルを介して、CDテーブルからテーブルへの別の関連付けが必要になります。cd_trackscd.dogTagcd_tracks.id

もちろん、以前はクエリでMysql JOINを明示的に書き出すことでこれをすべて行っていましたが、Railsアソシエーションを作成したいと思います。

4

1 に答える 1