📅  最后修改于: 2023-12-03 14:39:30.830000             🧑  作者: Mango
belongs_to
belongs_to
是 ActiveRecord 提供的一种关联关系,用于表示当前模型属于另一个模型。
belongs_to :association_name, options
:association_name
:必须,关联模型的名称。:options
:可选,关联模型的设置。:class_name
:指定关联的模型名称。例如,如果关联的模型名不是类名,可以使用该选项指定正确的名称。:foreign_key
:指定关联的外键名称。例如,如果外键不是 association_name_id
,可以使用该选项指定正确的名称。:primary_key
:指定关联的主键名称。例如,如果主键不是 id
,可以使用该选项指定正确的名称。:counter_cache
:指定关联的计数器名称,以便激活计数器。例如,belongs_to :user, counter_cache: true
将在用户模型上自动增加 articles_count
字段。:optional
:设置为 true
,表示关联是可选的。默认为 false
,即关联必须存在。如果设置了 true
,则关联可以为 nil
。假设我们有两个模型:用户 (User
) 和文章 (Article
),每篇文章都属于一个用户。
在 Article
模型中添加 belongs_to :user
关联:
class Article < ApplicationRecord
belongs_to :user
end
现在,我们可以使用 user
方法获取该文章所属的用户:
article = Article.first
user = article.user
我们还可以使用 user=
方法设置该文章所属的用户:
user = User.first
article.user = user
假设我们的外键不是默认的 user_id
,而是 author_id
,我们可以使用 :foreign_key
选项来指定外键名称:
class Article < ApplicationRecord
belongs_to :author, foreign_key: "author_id", class_name: "User"
end
假设我们的关联模型的主键不是默认的 id
,而是 uuid
,我们可以使用 :primary_key
选项来指定主键名称:
class User < ApplicationRecord
self.primary_key = "uuid"
has_many :articles
end
class Article < ApplicationRecord
belongs_to :user, primary_key: "uuid"
end
假设我们想要在用户模型上自动增加文章计数器 articles_count
,我们可以使用 :counter_cache
选项来激活计数器:
class User < ApplicationRecord
has_many :articles, counter_cache: true
end
class Article < ApplicationRecord
belongs_to :user
end
假设文章可能不属于任何用户(例如,它是管理员发布的),我们可以使用 :optional
选项来设置关联为可选:
class Article < ApplicationRecord
belongs_to :user, optional: true
end