mysql - belongs_to 和引用实际上在表中创建关系吗?

标签 mysql ruby-on-rails ruby-on-rails-4 foreign-key-relationship

我使用的是 Ruby on Rails 4.2。现在使用关系并尝试在 ContosoUniversity of .net MVC 示例中所示的 Instructor 和 Office_Assignments 之间创建一对一关系。请点击here查看关系详细信息。

在 ruby​​ 中,我正在关注 this教程。

我使用以下命令添加了讲师模型。

rails g model Instructor LastName:string FirstMidName:string HireDate:date

然后创建如下所示的 Office_Assignments

rails g model OfficeAssignments Location:string

现在我更新了模型类,如下所示的关系。

class Instructor < ActiveRecord::Base
  has_one :office_assignment
end

class OfficeAssignment < ActiveRecord::Base
  belongs_to :instructor
end

在 create_office_assignments 迁移文件中,我对关系进行了如下更改

class CreateOfficeAssignments < ActiveRecord::Migration
  def change
    create_table :office_assignments do |t|
      t.belongs_to :instructor
      t.string :Location
      t.timestamps null: false
    end
  end
end

因此,当我使用 migrate 命令时,会在 mysql 中创建表和列,如下所示

mysql>描述office_assignments;

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| instructor_id | int(11)      | YES  |     | NULL    |                |
| Location      | varchar(255) | YES  |     | NULL    |                |
| created_at    | datetime     | NO   |     | NULL    |                |
| updated_at    | datetime     | NO   |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

但是当我检查如下关系时,它没有创建任何外键关系。

mysql> 从 information_schema.key_column_usage 中选择 table_name、column_name、constraint_name、referenced_table_name、referenced_column_name,其中constraint_schema = 'ContosoUniversity';

+--------------------+-------------+--------------------------+-----------------------+------------------------+
| table_name         | column_name | constraint_name          | referenced_table_name | referenced_column_name |
+--------------------+-------------+--------------------------+-----------------------+------------------------+
| instructors        | id          | PRIMARY                  | NULL                  | NULL                   |
| office_assignments | id          | PRIMARY                  | NULL                  | NULL                   |
| schema_migrations  | version     | unique_schema_migrations | NULL                  | NULL                   |
| students           | id          | PRIMARY                  | NULL                  | NULL                   |
+--------------------+-------------+--------------------------+-----------------------+------------------------+
4 rows in set (0.00 sec)

在这里我很困惑为什么不创建外键或者我在迁移或其他地方错过了任何内容?我还需要将主键和外键设置为同一列。我读过有关 add_foreign_key 的内容,但不明白

最佳答案

运行

rails g model Instructor LastName:string FirstMidName:string HireDate:date 

rails g model OfficeAssignments Location:string instructor:references

将创建数据库级别约束,将belongs_to/has_one添加到模型中,然后检查生成的迁移文件。您还可以在其中添加 on_update: 'delete' 等。

关于mysql - belongs_to 和引用实际上在表中创建关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29027444/

相关文章:

mysql - 'SHOW INDEX' 在具有非常大的表的 MySQL 上缓慢/有问题

mysql - 如何使用 bundler 安装 mysql gem? (OS X Lion)

mysql - 动态更改表名

php - 查询生成器 : Sum values of a pivot table

mysql - 如何解决mysql警告: "InnoDB: page_cleaner: 1000ms intended loop took XXX ms. The settings might not be optimal "?

ruby-on-rails - Rails session 存储模型对象

css - 在 Rails 4 应用程序中设置 JQuery UI 选项卡样式时遇到问题

PHP json编码数组并将返回值存储在mysql中

ruby-on-rails - 获取模型 ID where(value==x)

ruby-on-rails - if语句基于表单select rails