我正在使用多态关联来论证我的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
专辑的相同艺术家ID查询@post
个模型...但这不是我想要的......
我想要一套Post
@albums = Album.where('albums.artist_id = "?"', @post.post_module.artist.id)
我该怎么做?还是我设计了一个糟糕的模特关系?
答案 0 :(得分: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)
对于您的模型设计,有两个建议:
postable
而不是post_module
答案 1 :(得分:0)
如果我理解正确,您想要检索给定艺术家ID的所有帖子。所以:
@posts = Post.joins(:post_module => :album).where(:post_module => { :album => { :artist_id => artist_id }})
答案 2 :(得分: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)