Sql 如何连接两个';通过';关联到另一个关联?

Sql 如何连接两个';通过';关联到另一个关联?,sql,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Sql,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我想创建一个额外的关联,它结合了其他两个关联 class Person < ActiveRecord::Base has_many :cats has_many :dogs has_many :pets(dogs and cats) ??? end 您应该利用类继承 class Person < ActiveRecord::Base has_many :pets end class Pets < ActiveRecord::Base belongs_t

我想创建一个额外的关联,它结合了其他两个关联

class Person < ActiveRecord::Base
  has_many :cats
  has_many :dogs
  has_many :pets(dogs and cats)  ???
end

您应该利用类继承

class Person < ActiveRecord::Base
  has_many :pets
end

class Pets < ActiveRecord::Base
  belongs_to :person
end

class Dog < Pet
end

class Cat < Pet
end
class-Person

类似于此

我需要将记录从联接表中拉出,而不管它们在哪一列中。这纯粹是一个优化问题,因此我不需要为每个关联对数据库进行两次ping。对数据库进行两次ping是什么意思?你的意思是多个select语句中的as吗?如果是这样的话,通过一次选择检索猫和狗的唯一方法是使用STI将它们存储在同一个表中。
SELECT DISTINCT persons.* 
  FROM persons 
  WHERE persons.id IN 
  ( 
    SELECT faxes.sender_id 
      WHERE fakes.receiver_id = (?)
  )     
  OR  persons.id IN 
  ( 
    SELECT faxes.receiver_id 
      WHERE fakes.sender_id = (?)
  )
class Person < ActiveRecord::Base
  has_many :pets
end

class Pets < ActiveRecord::Base
  belongs_to :person
end

class Dog < Pet
end

class Cat < Pet
end