我有一个Project模型和一个Contact模型。项目模型有一个所有者和一个客户,两者都是Contact。很明显,我一直在做一些模棱两可的事情,因为如果我有联系并要求其项目,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


如何在这里建立两个关系?

最佳答案

它类似于在另一个类中定义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


协会的名称可能会更好。我之前介绍的Single Table继承方法也是一种整洁的方法,但是如果您对OwnerContact和ClientContact类的每个行为有很多不同的行为,请采用此方法,否则可能只是无用的开销。

关于ruby-on-rails - 如何在两个模型之间建立两个has_many/belongs_to关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4729725/

10-16 15:45