如何将两个'has_many_through'关联加入另一个关联?

时间:2013-11-28 19:24:37

标签: 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

有没有人知道实现这个目标的好方法?

修改

我需要从连接表中提取记录,无论它们在哪个列中。这纯粹是一个优化问题,因此我不需要为每个关联ping数据库两次。

修改:

我选择了一组糟糕的数据示例。

class Person < ActiveRecord::Base
  has_many :senders (is a person object) 
  has_many :receivers (is a person object)
  has_many :contacts(friends and enemies)  ???
end

有一个名为faxes的连接表,其字段为friend_id和enemy_id

我想用rails的方式说:

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 = (?)
  )

1 个答案:

答案 0 :(得分:0)

你应该利用类继承。

class Person < ActiveRecord::Base
  has_many :pets
end

class Pets < ActiveRecord::Base
  belongs_to :person
end

class Dog < Pet
end

class Cat < Pet
end

类似于此SO Post

的内容