Rails 5.0: добавление таблицы самостоятельного соединения, которая ссылается на существующую таблицу - PullRequest
0 голосов
/ 14 ноября 2018

Мы создаем программу планирования полетов, которая предусматривает расписание сотрудников и самолетов для полетов.

Вот модели, которые в настоящее время существуют. Airport Pilot FlightAttendant Aircraft

Мы начинаем только с четырьмя аэропортами.Мы хотим заполнить четыре аэропорта в таблице «Аэропорты», как только приложение запустится, а затем составить таблицу самообъединения из аэропортов, в которой перечислены все возможные комбинации отправления-назначения и их продолжительность.

Как бымы делаем это?

Я видел кое-что в Интернете об этом, но похоже, что это было сделано, когда мы создаем модели, но наши модели уже сделаны, поэтому я не могу понять миграцию и какзаполните эту таблицу автоматически.Мы знаем длительности и просто должны ввести их.

РЕДАКТИРОВАТЬ:

В ответ на время полета: мы планируем сохранить их как целое число, которое представляет собой количество минут, которое требуется длязавершить полет.Аэропорты в городах Среднего Запада выбираются случайным образом в центральном часовом поясе.

Линкольн и Айова-Сити: 32 минуты

Линкольн и Эванстон: 57 минут

Линкольн и Уэст-Лафайет: 62 минуты

Айова-Сити и Эванстон: 24 минуты

Айова-Сити и Уэст-Лафайет: 31 минута

Эванстон и Уэст-Лафайетт: 13 минут

Дляподробнее

Это особая миграция, которая создала таблицу аэропортов.

class CreateAirports < ActiveRecord::Migration[5.2]
  def change
    create_table :airports do |t|
      t.string :full_name
      t.string :flight_code

      t.timestamps
    end
  end
end

full_name - это просто имя, подобное Evanston.flight_code - это трехбуквенный код, представляющий его, как EVA.Модель в настоящее время пуста.Нужно ли сначала что-то добавлять в него перед тем, как добавить столбцы ассоциации, или мне нужно сгенерировать миграцию, чтобы создать таблицу соединений, а затем изменить модель аэропорта?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете запустить код ruby ​​после миграции, код Rails в этом случае:

class CreateAirports < ActiveRecord::Migration[5.2]
  def change
    create_table :airports do |t|
      t.string :full_name
      t.string :flight_code

      t.timestamps
    end

    Airport.create(params_for_airport1)
    Airport.create(params_for_airport2)
    Airport.create(params_for_airport3)
    Airport.create(params_for_airport4)
  end
end

Тогда, для таблицы длительностей, я думаю, у вас будет что-то вроде «FlightDuration» с использованием таблицы из 3 столбцов: airport_from_id, airport_to_id, duration. Вы можете сделать то же, что и раньше, создать таблицу и сразу после create_table просто создать объекты с данными.

Вам нужно будет добавить отношения к Airport и FlightDuration, что-то вроде:

class Airport < ApplicationRecord
  has_many :flight_durations_from, class_name: 'FlightDuration', inverse_of: :airport_from
  has_many :flight_durations_to, class_name: 'FlightDuration', inverse_of: :airport_to
end

class FlightDuration < ApplicationRecord
  belongs_to :airport_from, class_name: 'Airport', foreign_key: :airport_from_id
  belongs_to :airport_to, class_name: 'Airport', foreign_key: :airport_to_id
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...