我有以下模特和协会:
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。是否是在用户和艺术家/专辑之间创建has_and_belongs_to_many关联的最有效选项?
似乎应该有更好的方法,但我还没有找到任何东西。
答案 0 :(得分:2)
你可以使用has_many:albums,:through =&gt; :用户对象上的歌曲。 Arel(AR)会自动为您创建连接,从而产生一个查询,并且只会获取与属于用户的歌曲相关的相册。用户对象上的艺术家也是如此。