0

モデルの引数にポリモーフィックな関連付けを使用してPostいます (これには、共通の投稿属性-タイトル、本文、日付などがあります...)

これが私のモデルです。

class Post < ActiveRecord::Base
  belongs_to :post_module, polymorphic: true
end

class Album < ActiveRecord::Base
  has_one :post, as: :post_module
  belongs_to :artist
end

class Artist < ActiveRecord::Base
  has_many :albums
end

今、私はPostモデルを持つモデルを持っていAlbumます:post_module

@post = Post.find(params[:id]) #its :post_module is an Album model

Postここで、その投稿のアルバムのアーティスト ID と同じアーティスト ID を持つ Album モデルを持つ sをクエリしたいと思います。


Albumそのアルバムの同じアーティスト ID を持つモデルを照会できます@post...しかし、それは私が望むものではありません..

のセットが欲しいPost

@albums = Album.where('albums.artist_id = "?"', @post.post_module.artist.id)

これどうやってするの?または、悪いモデル関係を設計していますか?

4

3 に答える 3

0

アーティストへの投稿

artist = Artist.last

#This will get a scoped object for all posts belonging to this artist's albums
posts = Post.where(id: artist.albums) 

モデルの設計について、次の 2 つの提案があります。

  1. Album だけが Post に関連付けられている場合、ポリモーフィックは必要ありませんが、もっとあるかもしれません。
  2. postableポリモーフィックな名前の場合、規則では、代わりにadj を使用します。post_module
于 2013-09-27T10:25:24.590 に答える
0

私の理解が正しければ、特定のアーティスト ID のすべての投稿を取得する必要があります。そう:

@posts = Post.joins(:post_module => :album).where(:post_module => { :album => { :artist_id => artist_id }})
于 2013-09-27T10:54:26.703 に答える
0

私はで終わった

Post.joins('LEFT OUTER JOIN albums ON albums.id = posts.post_module_id').where('posts.post_module_type = "Album" AND albums.artist_id = "?"', @artist.id)

于 2013-10-05T02:11:18.370 に答える