Метод join
в ActiveRelation
всегда использует внутренние объединения, поэтому нет способа сделать это "правильно" с точки зрения SQL.Тем не менее, вы всегда можете настроить counter_cache
и запросить его следующим образом:
class User < ActiveRecord::Base
has_many :projects, :counter_cache => true
has_many :joined_projects, :through => :memberships, :counter_cache => true
class << self
def has_projects
where('projects_count > 0 OR joined_projects_count > 0')
end
end
def all_projects
projects + joined_projects
end
end
Это может поразить нерв нормализации, но должно выполнить работу.