Rails ActiveRecord Join - PullRequest
       1

Rails ActiveRecord Join

0 голосов
/ 03 сентября 2011

Я использую рельсы и пытаюсь выяснить, как использовать ActiveRecord в методе, чтобы объединить следующее в один запрос:

def children_active(segment)
  parent_id = Category.select('id').where('segment' => segment)
  Category.where('parent_id'=>parent_id, 'active' => true)
end

По сути, я пытаюсь получить подкатегории категории, которая обозначена уникальным столбцом под названием сегмент. Прямо сейчас я получаю идентификатор категории в первом запросе, а затем использую это значение для parent_id во втором запросе. Я пытался понять, как использовать AR для объединения, чтобы его можно было выполнить всего за один запрос.

1 Ответ

1 голос
/ 03 сентября 2011

Вы можете использовать самостоятельное соединение с именем таблицы псевдонимов:

Category.joins("LEFT OUTER JOIN categories AS segment_categories on segment_categories.id = categories.parent_id").where("segment_categories.segment = ?", segment).where("categories.active = ?", true)

Это может выглядеть не так круто, но он может реализовать запрос в одну строку, и при большом сборе данных потеря производительности будет намного меньше, чем у вашего решения, потому что "INCLUDE IN" намного медленнее, чем "JOIN" ,

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