我有一个应用程序,我想通过另一个模型(即Task1> Relationship< Task2)将模型的实例链接到同一模型的另一个实例,我想知道我是否可以使用has_many:through来实现此目的。
基本上,关系模型会有额外的信息(type_of_relationship,lag),因此将它作为连接模型是理想的。但是,没有两个模型可以加入,只有一个......自己。 has_many:还能继续吗?如果是这样,联接表将如何显示?使用Rails约定,您将有两个名为Activity_id的列,这显然不适用于数据库。
或者,我可以使用has_many_and_belongs_to在Task模型和Relationship模型之间设置多个,但我不确定这是否准确描述了一个只能在任何一个Relationship模型中链接两个Task模型的关系(虽然当然任务可能属于多个关系,因此很多很多。)
我的直觉是说要使用has_many_and_belongs_to并对模型中的规则进行排序,但有更好的方法吗?我正绕着这个圈子走了一圈!
任何帮助表示感谢。
答案 0 :(得分:8)
has_many:完全符合你的情况。我不知道你的模型的细节,但是假设你有用户,每个用户都可以有其他用户作为联系人。您可以按如下方式对此情况进行建模:
class User < ActiveRecord::Base
has_many :contact_records, :foreign_key => :owner_id
has_many :contacts, :through => :contact_records, :class_name => "User"
end
class ContactRecord < ActiveRecord::Base
belongs_to :owner, :class_name => "User"
belongs_to :user
end