SQL / RoR ActiveRecord Агрегация запросов через отношение has_many - PullRequest
0 голосов
/ 07 ноября 2018

Рассмотрим следующее:

  1. Семья has_many kids (Семья 1: много Малыш)
  2. Ребенок имеет атрибут enum age_group, который может быть ребенком, ребенком, подростком или взрослым

Я хотел бы создать несколько областей:

  1. Выберите все семьи, в которых есть ТОЛЬКО дети age_group: baby. Это означает, что если в семье есть ребенок и ребенок, эта семья не должна соответствовать этой области.

  2. Выберите все семьи, в которых есть ребенок и ребенок, но нет подростка или взрослого.

Другими областями видимости являются ТОЛЬКО возрастная группа: ребенок, подросток, взрослый и т. Д., Но я считаю, что могу создать это исходя из той же логики, что и в 1-й области.

1 Ответ

0 голосов
/ 08 ноября 2018

Я закончил тем, что придумал что-то вроде этого ...

Family.find_by_sql("SELECT * FROM kids WHERE NOT EXISTS ( SELECT NULL FROM kids WHERE kids.family_id = family.id AND family.age_group != 'baby')")

По моим ограниченным данным, все семьи, в которых есть только дети, были получены. Однако я не тестировал это всесторонне, потому что он не был расширяемым. Так как я должен был использовать find_by_sql, я не мог связать это с другими activerecord, где вызовы или добавить нумерацию страниц к этому.

Я решил пойти другим путем и создать столбец family_stage в семье, и дети в любое время обновляются или добавляются в семью для обновления family_stage. Это делает запросы ко всему намного проще и переводит обработку на обновления.

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