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

Sql ActiveRecord查询以获取与此帖子主题相同的所有帖子,sql,ruby-on-rails,activerecord,ruby-on-rails-3.1,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_ass

我正在绞尽脑汁寻找相关帖子:

以下是我的模型:

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
考虑到我有一篇文章可能有主题,也可能没有主题。我需要找到所有与此主题相同的帖子


我已经在使用Squear gem,因此语法更可取。

对不起,我没有使用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

它应该是
.uniq
而不是
.uniq<代码>.uniq返回
nil
Yes此项按预期工作。我认为第一种方法有一些性能缺陷,因为它对每个单独的主题执行查询。第二种方法的sql语法似乎有错误<代码>和左侧外部联接
似乎无效。我没法让它正常工作。哦,对不起。“和”是额外的。