📅  最后修改于: 2023-12-03 14:39:01.268000             🧑  作者: Mango
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” 方法则用来添加一个新的列以代替原来的外键。