我有一个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/