2013-03-04 91 views
0

我有两种模式。如何获取与模型关联模型相关的模型?

文章

class Article < ActiveRecord::Base 

    attr_accessible :title, :body, :artist_ids 

    has_many :artists, :through => :artist_relationships 
    has_many :artist_relationships 

end 

Artist.rb

class Artist < ActiveRecord::Base 

    attr_accessible :title, :body, :article_ids 

    has_many :articles, :through => :artist_relationships 
    has_many :artist_relationships 

end 

现在假设我有两个Artist相关的Article(如迈克尔·杰克逊,披头士......)

那么每个艺术家都有一些文章给他们。

我想要做的是通过其artists获取所有文章Article有关..

这是什么东西我想(这是行不通的....)

@article = Article.find(param[:id]) # an Article 
@articles = Article.where(:artist_ids => @article.artist_ids) # get all articles of its related artists 

回答

1

尝试

@articles = Article.joins(:artist_relationships).where(artist_relationships: { artist_id: @article.artist_ids }) 
+0

谢谢您的回答。它工作正常,除了有关两位艺术家的文章出现两次。我该如何解决它? – synthresin 2013-03-04 05:40:29

+0

我通过附加'''.uniq'''解决了这个问题,谢谢! – synthresin 2013-03-04 05:45:31

1

你没有发布您的代码为您ArtistRelationship模型,但我相信你完成了has_man使用y_through关系:

class ArtistRelationship < ActiveRecord::Base 
belongs_to :article 
belongs_to :artist 
end 

如果您在本设置正确,那么你就可以利用的方法,如@article.artists@artist.articles

所以,你可以做线沿线的东西:

@article = Article.find(params[:id]) #Any given article 
@artists = @article.artists #All artists related to the article 
@articles = @artists.collect{|artist| artist.articles} #Collection of all articles related to all the artists 
+0

我会检查收集方法。谢谢! – synthresin 2013-03-04 06:39:09