用于链接同一模型的两个记录的ActiveRecord关系声明? (自我引用多对多)

时间:2011-01-20 00:36:51

标签: ruby-on-rails ruby-on-rails-3 many-to-many associations

我有一个模特(旅行),我希望与其他同类(其他旅行)有关。

使用连接模型存储两个trip_id值和一个强度值(表示关系的强度)。

让我的情况变得棘手的原因是这种关系是一种双向关系。所以他们不是这种关系的“所有者”。我想带@trip_a并要求@ trip_a.trip_relations找到所有相关的旅程。同样我想要@ trip_b.trip_relations。

代码可能有助于解释:

class TripRelation < ActiveRecord::Base
  belongs_to :trip_a, :class_name => "Trip", :foreign_key => "trip_a_id"
  belongs_to :trip_b, :class_name => "Trip", :foreign_key => "trip_b_id"
end

class Trip < ActiveRecord::Base
  has_many :trip_a_relations, :class_name => "TripRelation", :foreign_key => "trip_a_id"
  has_many :trip_b_relations, :class_name => "TripRelation", :foreign_key => "trip_b_id"
  has_many :trip_as, :through => :trip_a_relations
  has_many :trip_bs, :through => :trip_b_relations
end

以上内容不起作用,但希望有助于说明意图。

我希望能够接受任何旅行并要求@ trip.trip_relations并获取@ trip.trip_as和@ trip.trip_bs的列表(删除重复项)。

我还想带任何旅行并建立像@ trip_a.trip_relations&lt;&lt;的关系。 @trip_b。现在@ trip_a.trip_relations.include?(@ trip_b)#=&gt;是和@ trip_b.trip_relations.include?(@ trip_b)#=&gt;真。

我可以写一个自定义方法,但我想知道是否有办法用ActiveRecord干净利落地完成。

1 个答案:

答案 0 :(得分:1)

有一个用于处理相互关系的库,名为acts_as_network,我过去曾用过这种关系,这些关系类似于我认为你得到的关系:

https://github.com/sjlombardo/acts_as_network