我有一个模特(旅行),我希望与其他同类(其他旅行)有关。
使用连接模型存储两个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干净利落地完成。
答案 0 :(得分:1)
有一个用于处理相互关系的库,名为acts_as_network,我过去曾用过这种关系,这些关系类似于我认为你得到的关系: