Если вы хотите найти все проекты, не связанные с конкретным активом, что-то вроде этого должно работать (это не проверено, поэтому отрегулируйте по мере необходимости):
Project.joins(:assets_projects).where("assets_projects.asset_id != ?", asset_id)
asset_id
- это id
вашего экземпляра Актива.
Кроме того, вы не должны циклически просматривать активы, чтобы найти все проекты, связанные с текущим активом итерации, что означало бы слишком большое количество обращений к базе данных (это так называемая проблема N + 1 - хорошее объяснение можно найти, например, здесь ). Чтобы найти все проекты, не связанные с каким-либо активом, одним запросом, выполните следующие действия:
Project.find_by_sql(%(
SELECT * FROM projects
WHERE NOT EXISTS (SELECT * FROM assets_projects WHERE assets_projects.project_id = projects.id)
))