как обновить схему базы данных после запуска миграций в ruby ​​на рельсах - PullRequest
0 голосов
/ 25 сентября 2018

Я начинаю с Ruby on Rails, и у меня есть эти две модели:

Город и улица,

Эти две модели были сгенерированы независимо, без связи между ними.Теперь мне нужно, чтобы в городе было много улиц, и каждая улица принадлежала одному городу.Я запустил эту команду:

bin/rails generate migration AddCityRefToStreets city:references

, которая произвела эту миграцию:

class AddCityRefToStreets < ActiveRecord::Migration[5.2]
  def change
    add_reference :streets, :city, foreign_key: true
  end
end

Затем я запустил bin/rails db:migrate, а затем я вошел в эти классы моделей и написал:

class City < ApplicationRecord
   has_many :streets, dependant: :destroy
end

и

class Street < ApplicationRecord
   belongs_to :city
end

Rails не показывал никаких жалоб, и до сих пор он работает нормально для меня.Если я спрошу @city.streets.length, он вернет правильное количество улиц для этого @city.Если я спрашиваю @street.city, он также возвращает правильный город.

Дело в том, что я вошел в базу данных, используя DBeaver, и миграция не вызвала связи между таблицами cities и streets.Таблица streets показывает мне поле city_id, но все еще не показывает никаких отношений в представлении ER Diagram.

Мой вопрос: что мне здесь не хватает?Это правильный способ связать две сущности, созданные независимо?

Я использую Linux Mint 18.3, Rails 5.2.1, Sqlite 3.11.0 и DBeaver 5.1.

1 Ответ

0 голосов
/ 25 сентября 2018

Команда миграции add_reference добавит столбец city_id в вашу таблицу streets.

Когда вы звоните @city.streets, он оценивается как эквивалент Street.where(city_id: @city.id).

Аналогично, @street.city будет смотреть на идентификатор, сохраненный в столбце city_id, и выполнитпоиск - эквивалент City.find(@street.city_id).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...