我如何在两个模型之间做两个has_many/belongs_to关系?

Ski*_*ick 2 ruby-on-rails ruby-on-rails-3

我有一个Project模特和一个Contact模特.Project模型有一个所有者和一个客户端,两者都是Contacts.我显然有些模棱两可的事情,因为如果我有一个联系人并要求它的项目,Rails将无法知道我是否要求它的项目在哪里是客户端或者它是所有者.到目前为止,我有这个:

class Contact < ActiveRecord::Base
  has_many :projects
end

class Project < ActiveRecord::Base
  belongs_to :owner, :class_name => 'Contact', :foreign_key => 'owner_id'
  belongs_to :client, :class_name => 'Contact', :foreign_key => 'client_id'
end
Run Code Online (Sandbox Code Playgroud)

我如何在这里建立两种关系?

Ris*_*ogi 7

它的方式类似于belongs_to其他类中的定义.

所以基本上

class Contact < ActiveRecord::Base
  has_many :projects_owned, :class_name => "Project", :foreign_key => "owner_id"
  has_many :projects_as_client, :class_name  => "Project", :foreign_key => "client_id"
end
Run Code Online (Sandbox Code Playgroud)

协会的名称可能会更好.我之前描述的单表继承方法也是一种简洁的方法,但如果你对每个OwnerContact和ClientContact类有很多不同的行为,那就去做吧,否则它可能只是一个无用的开销.