Я хочу отобразить список всех проектов, где находится проект
имеет одну или несколько задач
И
имеет одного или нескольких клиентов ИЛИ имеет флаг 'can_have_clients = 0'
И
current_user имеет назначение на клиенте
Мой текущий запрос работает, но выглядит неправильно:
Project.where('id IN (SELECT DISTINCT project_id FROM tasks)')
.where('id IN (SELECT DISTINCT project_id FROM clients WHERE id IN (
SELECT DISTINCT resource_id FROM assignments WHERE resource_type="Client" AND user_id=?))
OR can_have_clients = 0', current_user)
Можно ли разделить больше (особенно последний, где / ИЛИ), и похоже ли это на путь с рельсами?
# model
class Project < ActiveRecord::Base
has_many :tasks
has_many :clients
...
class Task < ActiveRecord::Base
belongs_to :project
...
class Client < ActiveRecord::Base
has_many :assignments, :as => :resource
...