Запрос ActiveRecord для получения всех сообщений, имеющих общую тему с этим сообщением - PullRequest
0 голосов
/ 29 января 2012

Я ломаю голову над этим сложным запросом для поиска похожих постов:

Вот мои модели:

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

Учитывая, что у меня есть пост, который может иметь или не иметь тему. Мне нужно найти все сообщения, имеющие общую с этим тему.

Я уже использую камень визга, чтобы синтаксис был предпочтительным.

1 Ответ

2 голосов
/ 29 января 2012

Извините, я не использовал драгоценный камень, поэтому не знаю его синтаксис. Я думаю, что это будет работать, но это может быть не лучшим способом:

@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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...