我从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 图视图中仍未显示任何关系。
我的问题是:我在这里错过了什么?这是关联两个独立创建的实体的正确方法吗?
我正在使用Linux Mint 18.3,Rails 5.2.1,Sqlite 3.11.0和DBeaver 5.1。
add_reference
迁移命令将向streets
表中添加city_id
列。
当您调用@city.streets
时,它被评估为等效于Street.where(city_id: @city.id)
。
同样,@street.city
将查看存储在city_id
列中的 ID,并进行查找 - 相当于City.find(@street.city_id)
。