ActiveRecord查询以获取与此帖子有共同主题的所有帖子

时间:2012-01-29 03:56:05

标签: sql ruby-on-rails activerecord ruby-on-rails-3.1

我在这个复杂的查询中绞尽脑汁寻找相关帖子:

这是我的模特:

class Post
   has_many :post_assignments, :dependent => :destroy
   has_many :topics, :through => :post_assignments
end

class PostAssignment
   belongs_to :post
   belongs_to :topic
end

class Topic
  has_many :post_assignments, :dependent => :destroy
  has_many :posts, :through => :post_assignments
end

鉴于我的帖子可能有也可能没有主题。我需要找到与此主题共享主题的所有帖子。

我已经在使用squeal gem了,所以语法更可取。

1 个答案:

答案 0 :(得分:2)

抱歉,我没有使用过sequeal gem,所以不知道它的语法。我认为这会奏效,但可能不是最佳方式:

@post.topics.map(&:posts).flatten.uniq

我能想到的另一种方式:

Post.joins('LEFT OUTER JOIN post_assignments ON post_assignments.post_id = post.id LEFT OUTER JOIN topics on post_assignments.topic_id = topic.id').where(:topic_id => @post.topics.map(&:id)) 

最后,您可以编写SQL。