我构建了一个解决铁路优化问题的应用程序。您可以创建一些站点,您需要创建一个时间表,其中包括列车编号,到达站,到达时间,出发站,出发时间以及对此铁路连接的需求。现在我遇到了问题,我只有一个用于出发站的station_id,但我也需要为我的到站提供station_id。这是必不可少的,因为当我删除一个电台时,我希望删除使用该电台的相应铁路连接。以下是我的schema.rb的一些摘录:
ActiveRecord::Schema.define(version: 20160310101628) do
create_table "stations", force: :cascade do |t|
t.string "shortcut"
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "timetables", force: :cascade do |t|
t.integer "train_number"
t.string "departure_station"
t.string "departure_time"
t.string "arrival_station"
t.string "arrival_time"
t.integer "demand_first_class"
t.integer "demand_second_class"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "station_id"
end
end
是否有一个命令在创建新工作站时创建,例如一个具有与station_id相同的id号的station_departure_id? 还有其他可能解决这个问题吗?
答案 0 :(得分:1)
好的,如果我理解正确的话:
您希望每个Timetable
同时拥有一个出发站和到达站,并确保在删除Station
时,具有该Timetable
Station
的{{1}}如同出发或到达站也被删除。
你可以通过以下方式实现这一目标:
class Timetable < ActiveRecord::Base
belongs_to :departure_station, class: 'Station', foreign_key: :departure_station_id
belongs_to :arrival_station, class: 'Station', foreign_key: :arrival_station_id
# ...
end
class Station < ActiveRecord::Base
has_many :departure_timetables, class: 'Timetable', foreign_key: :departure_station_id, dependent: :destroy
has_many :arrival_timetables, class: 'Timetable', foreign_key: :arrival_station_id, dependent: :destroy
#...
end
dependent: :destroy
课程中has_many
个关联的Station
选项可确保将该电台设为的任何Timetable
出发站< 或到达站将在删除Station
时删除。