0

我有两个模型。

文章

 class Article < ActiveRecord::Base

   attr_accessible :title, :body, :artist_ids

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

 end

艺术家.rb

 class Artist < ActiveRecord::Base

   attr_accessible :title, :body, :article_ids

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

 end

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

然后每个艺术家都有一些文章给他们。

我想要做的是通过它的..获取所有与 an 相关的文章。Articleartists

这是我尝试过的东西(不起作用....)

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

2 回答 2

1

尝试

@articles = Article.joins(:artist_relationships).where(artist_relationships: { artist_id: @article.artist_ids })
于 2013-03-04T05:33:22.323 回答
1

您没有发布 ArtistRelationship 模型的代码,但我假设您使用以下方法完成了 has_many_through 关系:

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

如果您正确设置了此设置,那么您将能够利用诸如@article.artistsor之类的方法@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
于 2013-03-04T06:06:04.800 回答