代码之家  ›  专栏  ›  技术社区  ›  assembler

如何在RubyonRails中运行迁移之后更新数据库模式

  •  1
  • assembler  · 技术社区  · 6 年前

    我从RubyonRails开始,我有两个模型:

    城市和街道,

    这两个模型是独立生成的,它们之间没有任何关系。现在我需要一个城市有许多街道,每个街道都属于一个城市。我运行了这个命令:

    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 桌子。这个 街道 表中显示了 city_id 字段,但在ER图表视图中仍不显示任何关系。

    我的问题是:我在这里遗漏了什么?这是将独立创建的两个实体关联起来的正确方法吗?

    我使用的是LinuxMint 18.3、Rails 5.2.1、SQLite 3.11.0和DBeaver 5.1。

    1 回复  |  直到 6 年前
        1
  •  1
  •   ScottM    6 年前

    这个 add_reference 迁移命令将添加一个 city_id 列到您 streets 表。

    当你打电话 @city.streets ,它被评估为 Street.where(city_id: @city.id) .

    同样地, @street.city 将查看存储在 城市居民 列,并执行查找-相当于 City.find(@street.city_id) .