Cria os scopes lá no model de Coordinator, assim fica mais fácil organizar. PS: não esqueça de testar isso, não tenho certeza se está funcionando corretamente, só escrevi diretamente aqui no gist.
scope :assigned_to_project, ->(id) { left_outer_joins(:project).where(projects: { id: id }) }
scope :without_projects, -> { assigned_to_project(nil) }
scope :without_projects_or_assigned_to_project, ->(id) { without_projects.or(assigned_to_project(id)) }
No teu controller pode fazer algo assim:
def new
if coordinators_without_projects.blank?
redirect_to admins_backoffice_projects_path, alert: "Necessário realizar o cadastro de um novo coordenador!"
end
end
def edit
# aqui provavelmente vai usar o coordinators sem projetos ou associado ao projeto atual
end
private
def coordinators_without_projects
@coordinators_without_projects ||= Coordinator.without_projects
end
def coordinators
@coordinators ||= Coordinator.without_projects_or_assigned_to_project(params[:project_id])
end