Rails HABTM: выберите все, что есть в записи

У меня есть три таблицы: проекты, технологии и проекты_технологии (сопоставление идентификаторов проектов с идентификаторами технологий). У меня есть две модели: проекты и технологии. Проекты имеют и принадлежат многим (HABTM) технологиям и наоборот. Теперь я пытаюсь получить все имена (или активные записи, если есть способ сделать это) технологий, принадлежащих данному проекту. Вот оператор SQL, который я сделал, используя 5 в качестве данного идентификатора проекта:

SELECT name FROM technologies WHERE id IN (
  SELECT projects_technologies.technology_id FROM projects_technologies
  WHERE projects_technologies.project_id = 5
);

Я мог бы просто подключиться к базе данных и выполнить запрос, но, поскольку у меня уже есть модели, настроенные с отношениями HABTM, мне интересно, есть ли «способ Rails» для выполнения этого. Я просматривал эту документацию, http://guides.rubyonrails.org/active_record_querying.html, но я не могу понять, могу ли я применить это к такого рода запросам и как.

ОБНОВЛЕНИЕ

Оказывается, все, что мне было нужно, это:

Project.find(5).technologies

person Qaz    schedule 08.06.2015    source источник
comment
Technology.joins(:projects).where('projects.id = ? ',5).select('technologies.name') попробуй это   -  person Vrushali Pawar    schedule 08.06.2015


Ответы (1)


Эквивалентный запрос активной записи будет

Technology.select('name').where("id IN (?)", ProjectTechnology.where("project_id = ?", 5).pluck(:technology_id))

Надеюсь это поможет!

person Rajdeep Singh    schedule 08.06.2015
comment
Спасибо! Я не знал о плаке. Нужно ли мне создавать модель ProjectTechnology, чтобы использовать это? Вот что я получаю, когда запускаю его в консоли: NameError: неинициализированная константа ProjectTechnology - person Qaz; 08.06.2015
comment
Да, определенно, вам нужна модель для этого - person Rajdeep Singh; 08.06.2015