ActiveRecord:地点和路线有哪些关联?

ActiveRecord : which associations for places and routes?

我想关联路线中的地点:一条路线有两个地点(起点和终点)+ 我需要存储这两个点之间的距离。我想知道数据模型是否正确: https://github.com/roms182/frais-kilometriques/blob/master/Annexes/shortmodel.png

而且我不确定如何解决 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_many 实际上应该解释为 :has_two

这使您可以更轻松地找到在特定地点终止的所有路线,而无需考虑它们是 "start" 或 "end"。