首先,我是初学者,请不要通过我的西红柿:) 我有模特:
class RailwayStation < ApplicationRecord
has_many :trains, foreign_key: :current_station_id
has_many :railway_stations_routes
has_many :routes, through: :railway_stations_routes
end
class Route < ApplicationRecord
has_many :railway_stations_routes
has_many :trains
has_many :railway_stations, through: :railway_stations_routes
end
class RailwayStationsRoute < ApplicationRecord
belongs_to :railway_station
belongs_to :route
end
class Train < ApplicationRecord
belongs_to :current_station, class_name: 'RailwayStation', foreign_key: :current_station_id
belongs_to :route
has_many :tickets
has_many :wagons
end
例如station_from = 1和station_last = 9 现在我需要找到沿着这条路线行驶的所有列车。在路线我需要条件:
railway_station.first.id = station_from
railway_station.last.id = station_last
我知道我需要使用joins.where但不知道如何......
更新 这段代码有效,但我认为有一个更好的解决方案:
routes_from = Route.joins(:railway_stations).where('railway_stations.id': 1)
routes_to = Route.joins(:railway_stations).where('railway_stations.id': 2)
routes_from.each do |route_from|
routes_to.where(id: route_from).each do |route|
route.trains.each do |train|
@trains ||= []
@trains << train
end
end
end
答案 0 :(得分:0)
我不知道你想如何在路线关系内对火车站进行分类。我认为你需要在RailwayStationsRoute
添加数字进行排序。
一般来说,你可以这样做:
rw_from = RaillwayStation.find(1)
rw_to = RaillwayStation.find(2)
trains = Train.where(route: rw_from.routes & rw_to.routes)