4

我有一个应用程序,我想通过另一个模型(即任务 1 > 关系 < 任务 2)将模型的一个实例链接到同一模型的另一个实例,并且想知道我是否可以使用 has_many :through 来实现这一点。

基本上,关系模型将具有额外的信息(type_of_relationship,lag),因此将其作为连接模型是理想的。然而,没有两个模型可以加入,只有一个……它自己。has_many :through 还能用吗?如果是这样,连接表的外观如何?使用 Rails 约定,您将有两个名为 Activity_id 的列,这显然在数据库中不起作用。

或者,我可以使用 has_many_and_belongs_to 在任务模型和关系模型之间设置多对多,但我不确定这是否准确地描述了一种关系,该关系应该只链接任何一个关系模型中的两个任务模型(当然任务可能属于多个关系,因此是多对多)。

我的直觉说要使用 has_many_and_belongs_to 并整理模型中的规则,但有更好的方法吗?我要在这个上兜圈子!

任何帮助表示赞赏。

4

1 回答 1

8

has_many :through 非常适合您的情况。我不知道你的模型的细节,但假设你有用户,每个用户都可以有其他用户作为联系人。您可以对这种情况进行建模,如下所示:

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
于 2009-01-23T08:14:59.650 回答