2012-04-25 6 views
2

PlaylistSongのモデルを設定するロジックを理解しようとしています。データベースモデリング曲を使用したプレイリスト

これまでのところ私が持っている:

User has_many :playlists, has_many :songs

Playlist belongs_to :user, has_many :songs

Song belongs_to :user

私は歌が多くのプレイリストに属することができることを関連付けるに取り掛かる必要があるかどうかはわかりません。

has_and_belongs_to_many :playlistsをセットアップして結合テーブルを設定したいのですが、has_many :throughを関連付ける必要がありますか?

ただ1つのモデルでHABTM関連付けを行うことはできますか、関連する2つのモデルでHABTM関連付けを宣言する必要がありますか? Playlistモデルでhas_and_belongs_to_many :songsの関連付けを行うのは正しいとは言えません。

UserSongの関係はうまくいきますが、私はちょうどPlaylistを実装しようとしています。もちろん、曲はプレイリストに属している必要はありません。

答えて

3

一つは、通常、次のような構造を持つテーブルを持っているでしょう:

unique_id song_id playlist_id 

これは、プレイリストの任意の数に属する曲の任意の数が可能になります。 unique_idは新しいテーブルの行だけです。

+0

は、だから私は、テーブル/にhas_manyに参加する必要はありません:スルー?そして、私はソングモデルでHABTM協会だけを宣言しますか? – user1015523

+0

1曲は多くのプレイリストに「属し」(関連する)ことができます。 1つのプレイリストは、多くのソングに「属し」(関連する)ことができます。したがって、両方のモデルでHABTMアサーションを宣言したいと思うようです。私は 'has_many:through'は、余分な列が必要な場合にのみ必要で、プレイリスト/曲のペアの評価(この曲はこのプレイリストに適しています)などが必要です。 – Ina

+0

ご清聴ありがとうございます。私は、ソングに属するプレイリストの文脈では、「belongs_to」が関連していると思うと思う。 – user1015523

0

これはどうですか?

User: 
    has_many :lists 
    has_many :songs 

List: 
    belongs_to :user 
    has_and_belongs_to_many :songs 

Song 
    belongs_to :user 
    has_and_belongs_to_many :lists 
2

HABTMは完全に私はあなたがhas_manyの使用したいと思います動作しますが:あなたが最も可能性の高いリスト/歌関係モデルにいくつかの余分な情報を追加したいと思うのでスルー。たとえば、曲の位置。以下のような

何か:

List 
    belongs_to :user 
    has_many :relationships 
    has_many :songs, :through => relationships 

Song 
    belongs_to :user 
    has_many :relationships 
    has_many lists, :through => :relationships 

Relationship 
    belongs_to :song 
    belongs_to :list 
関連する問題