ActiveRecord:地方和路线的哪些关联?

时间:2017-09-09 08:13:52

标签: ruby-on-rails ruby activerecord rails-activerecord data-modeling

我想关联路线内的地方:一条路线有两个地方(起点和终点)+我需要存储这两点的距离。我想知道数据模型是否正确: 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

1 个答案:

答案 0 :(得分:1)

您的路线需要与两个地方相关联 - 开始和结束。

所以一个选项是:

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

这使您可以更容易地找到在特定地点终止的所有路线,而不会将它们视为“开始”或“结束”。