Rails 4.2外键

Tom*_*ogg 7 migration ruby-on-rails foreign-keys ruby-on-rails-4

Rails 4.2新增支持添加和删除外键(在迁移中),如:

# add a foreign key to `articles.author_id` referencing `authors.id`
add_foreign_key :articles, :authors
Run Code Online (Sandbox Code Playgroud)

我不明白的是:这是怎么回事

add_foreign_key :articles, :authors
Run Code Online (Sandbox Code Playgroud)

不同于此:

add_column :articles, :author_id, :integer
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何澄清!

Sur*_*rya 9

不同之处在于:

add_foreign_key :articles, :authors
Run Code Online (Sandbox Code Playgroud)

实际上会生成这个:

ALTER TABLE "articles" ADD CONSTRAINT articles_author_id_fk FOREIGN KEY ("author_id") REFERENCES "authors" ("id");
Run Code Online (Sandbox Code Playgroud)

这个:

add_column :articles, :author_id, :integer
Run Code Online (Sandbox Code Playgroud)

会产生:

ALTER TABLE "articles" ADD COLUMN author_id INT(11);
Run Code Online (Sandbox Code Playgroud)

两者都不同,因为add_foreign_key只添加外键约束,而add_column添加列而不是约束.