我想关联路线内的地方:一条路线有两个地方(起点和终点)+我需要存储这两点的距离。我想知道数据模型是否正确: 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
答案 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
。
这使您可以更容易地找到在特定地点终止的所有路线,而不会将它们视为“开始”或“结束”。