需要在一个tablerow

时间:2016-03-10 14:45:59

标签: sql ruby-on-rails ruby

我构建了一个解决铁路优化问题的应用程序。您可以创建一些站点,您需要创建一个时间表,其中包括列车编号,到达站,到达时间,出发站,出发时间以及对此铁路连接的需求。现在我遇到了问题,我只有一个用于出发站的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? 还有其他可能解决这个问题吗?

1 个答案:

答案 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时删除。