📜  activerecord 引用外键 (1)

📅  最后修改于: 2023-12-03 14:39:01.268000             🧑  作者: Mango

Active Record 引用外键

Active Record 是 Rails 框架中的一部分,用于关系型数据库的 ORM(对象关系映射)。在数据库中,一些表通过外键关联在一起,形成关系。而在 Active Record 中用来管理这些关系的概念是 “关联”(association)。本文将介绍关联中的外键(foreign key)的使用方法。

创建带外键的关联

在创建带外键的关联时,需要在关联的两个表中指定好外键的名称和类型。

例如,我们有两个表,一个是“posts”,另一个是“users”,二者通过“user_id”外键关联在一起。我们可以在模型中这样定义这个关联:

class Post < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :posts
end

这里,“belongs_to” 和 “has_many” 都是关联的类型。在“Post”模型中,我们使用了“belongs_to :user”,表示“每个 Post 属于一个 User”,而在“User”模型中,我们使用了“has_many :posts”,表示“每个 User 可以拥有多个 Post”。

通过这样的关联,我们可以在代码中轻松地进行查询:

# 查询某个 User 的所有 Post
@user.posts

# 查询某个 Post 对应的 User
@post.user
添加外键

为了让关联中的外键生效,我们还需要在数据库中添加外键。Rails 提供了 migration 工具来帮助我们完成这个任务。

我们可以创建一个新的 migration 文件,并在其中添加下面的代码:

class AddUserToPosts < ActiveRecord::Migration
  def change
    add_column :posts, :user_id, :integer
    add_foreign_key :posts, :users
  end
end

这里,“add_column” 方法用来添加一个名为“user_id”的整数列到“posts”表中,用来保存外键值;而“add_foreign_key” 方法则用来将“posts”表的“user_id”外键关联到“users”表中。

删除外键

如果我们不再需要某个关联中的外键,或者需要修改它的类型,可以使用以下命令来修改 migration 文件:

class RemoveUserFromPosts < ActiveRecord::Migration
  def change
    remove_foreign_key :posts, :users
    remove_column :posts, :user_id
    add_column :posts, :user_uuid, :string
  end
end

这里,“remove_foreign_key” 和 “remove_column” 方法分别用来删除外键和列;而“add_column” 方法则用来添加一个新的列以代替原来的外键。