ActiveRecord Query: выберите запись, где хотя бы один из них имеет много связей - PullRequest
2 голосов
/ 28 июля 2011

Скажем, у вас есть это:

class Question < ActiveRecord::Base
 has_many :answers
end

class Answer < ActiveRecord::Base
 belongs_to :question
end

Как мне искать все вопросы, на которые есть ответы, не получая дубликаты вопросов?

Скажем, у вопроса есть два ответа, если вы сделаете это:

Question.joins(:answers)

, поскольку это внутреннее соединение, вы получите вопрос несколько раз.

Есть ли способ сделать это через интерфейс запросов, не делая необработанный SQL уникальным или уникальным?

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Я бы просто использовал столбец кэша счетчика. Это дает вам столбец базы данных в questions, который подсчитывает количество ответов, прикрепленных к нему. В качестве бонуса, вероятно, быстрее выполнить этот запрос.

Вот видео Railscasts, которое описывает, как его создать: http://railscasts.com/episodes/23-counter-cache-column

Тогда ваш запрос становится:

Question.where("answers_count > 0")

Вы могли бы даже подумать и определить это как область действия:

class Question < ActiveRecord::Base
  has_many :answers
  scope :answered, where("answers_count > 0")
end

Вроде бы простое решение, но простое - это хорошо.

1 голос
/ 13 октября 2014

Это должно работать:

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