0

次のモデルと関連付けがあります。

class User < ActiveRecord::Base   
    has_and_belongs_to_many :songs
end

class Song < ActiveRecord::Base 
    has_and_belongs_to_many :users
    belongs_to :album
    delegate :artist, :to => :album, :allow_nil => true
end

class Album < ActiveRecord::Base
    has_many :songs
    belongs_to :artist
end

class Artist < ActiveRecord::Base
    has_many :albums
    has_many :songs, :through => :albums
end

user.albums と user.artists を定期的に呼び出せるようにする必要があります。User と Artist/Album の間に has_and_belongs_to_many 関連付けを作成する最も効率的なオプションはありますか?

もっと良い方法があるはずですが、まだ何も見つけることができませんでした。

4

1 に答える 1

2

ユーザーオブジェクトで has_many :albums, :through => :songs を使用するだけです。Arel(AR) は自動的に結合を作成し、結果として 1 つのクエリになり、ユーザーに属する曲に関連するアルバムのみを取得します。同じことが User オブジェクトのアーティストにも当てはまります。

于 2012-10-25T16:32:59.823 に答える