理论上,这些关系应该适合你:
class Journey < ActiveRecord::Base
belongs_to :origin, class_name: :place
belongs_to :destination, class_name: :place
end
class Place < ActiveRecord::Base
has_many :origin_journeys, foreign_key: origin_id, class_name: :journey
has_many :destination_journeys, foreign_key: destination_id, class_name: :journey
def all_journeys
Journey.where("origin_id = :place_id OR destination_id = :place_id", place_id: self.id)
end
end
用法:
# controller for exemple
def journeys_of_that_place
@place = Place.find(params[:id])
@journeys = @place.all_journeys
@having_this_place_as_origin = @place.origin_journeys
end
# Question 2: Yes, it is possible
def update_origin
@journey = Journey.find(params[:id])
@journey.origin = Place.find(params[:place_id])
@journey.save
end