Ruby on rails ActiveRecord:地点和路线的哪些关联?

Ruby on rails ActiveRecord:地点和路线的哪些关联?,ruby-on-rails,ruby,activerecord,rails-activerecord,data-modeling,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,Data Modeling,我想关联路线中的位置:一条路线有两个位置(起点和终点)+我需要存储距离btw这两个点。我想知道数据模型是否正确: 我不知道如何解决Rails中的关联 class Place < ApplicationRecord has_many :routes end class Route < ApplicationRecord belongs_to :place end 上课地点

我想关联路线中的位置:一条路线有两个位置(起点和终点)+我需要存储距离btw这两个点。我想知道数据模型是否正确:

我不知道如何解决Rails中的关联

class Place < ApplicationRecord
  has_many :routes
end

class Route < ApplicationRecord
  belongs_to :place
end
上课地点
您的路线需要与两个地方关联——起点和终点

因此,一个选择是:

class Place < ApplicationRecord
  has_many :routes_as_start, class_name: "Route", foreign_key: :start_place_id
  has_many :routes_as_end,   class_name: "Route", foreign_key: :end_place_id
end

class Route < ApplicationRecord
  belongs_to :start_place, class_name: "Place"
  belongs_to :end_place,   class_name: "Place"
end
上课地点
但是,如果您的路线没有起点和终点的正式概念(即它们只是连接两个地点),您可能会受益于中间模型:

class Place < ApplicationRecord
  has_many :route_ends,
  has_many :routes, through: :ends
end

class RouteEnd
  belongs_to :place
  belongs_to :route
end

class Route < ApplicationRecord
  has_many :route_ends
  has_many :places, :through :route_end
end
上课地点
在这种情况下,
:has\u many
实际上应该解释为
:has\u two

这使您可以更轻松地找到在特定位置终止的所有路线,而不必考虑它们是“起点”或“终点”