0

私は2つのモデルを持っています。

記事

 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

今、私がArticle2人と関係があると仮定しますArtist(例:マイケルジャクソン、ビートルズ...)

その後、各アーティストは彼らのためにいくつかの記事を持っています。

私がやりたいのは、経由で関連するすべての記事をフェッチすることです。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

ArtistRelationshipモデルのコードを投稿していませんが、次を使用してhas_many_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
于 2013-03-04T06:06:04.800 に答える
1

試す

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