Мне нужно найти записи между двумя моделями.
class Report
has_and_belongs_to_many :groups
end
class Group
has_and_belongs_to_many :reports
end
и join_table - reports_groups
У меня есть массив идентификаторов групп, у меня есть доступ, например [1, 2]
. И мне нужно найти отчеты, в которых есть группы, к которым у меня есть доступ, только они.
If report has groups list like: [1], [2], [1,2] it is OK.
If report has - [1,2,3] - skip it.
If - [3,4] - skip it to.
Мне нужны только отчеты с разрешенными мной группами.
Почему бы просто не использовать сложный запрос с построением arel_table
accessible_group_ids = [1, 2,..., n]
Report.joins(:groups).where(Group.arel_table[:id].in(accessible_group_ids)).distinct
Дважды проверьте имя вашей таблицы соединений.
Report.where(
'NOT EXISTS(SELECT * FROM reports_groups WHERE report_id = reports.id AND group_id IN (?))',
[1, 2],
)
If report has - [1,2,3]