У меня есть модель (Поездка), которую я хочу связать с другими в своем роде (другие поездки).
Используется модель соединения, которая хранит два значения 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 << @trip_b.Теперь @ trip_a.trip_relations.include? (@ Trip_b) # => true и @ trip_b.trip_relations.include? (@ Trip_b) # => true.
Я мог бы написать собственные методы, но мне интересно, есть лиспособ сделать это чисто с ActiveRecord.