class Children < ActiveRecord::Base
  belongs_to :parent
  has_one :a_ancestor, through: :parent
  has_one :b_ancestor, through: :parent
  has_one :c_ancestor, through: :parent
end
class Parent < ActiveRecord::Base
  belongs_to :a_ancestor
  belongs_to :b_ancestor
  belongs_to :c_ancestor
end
class AAncestor < ActiveRecord::Base; end
class BAncestor < ActiveRecord::Base; end
class CAncestor < ActiveRecord::Base; end
Children.ransack(
  a_ancestor_id_eq: 1,
  b_ancestor_id_eq: 1,
  c_ancestor_id_eq: 1,
).result.to_sql
# => LEFT OUTER JOINs `parents` 3 times