gpt4 book ai didi

ruby-on-rails - Active Record Associations——一个模型可以同时属于不同的模型

转载 作者:搜寻专家 更新时间:2023-10-30 20:35:43 25 4
gpt4 key购买 nike

为以下场景创建事件记录关系的正确方法是什么-

模型 A 的一个实例可以同时属于另外两个模型(模型 B 和模型 C)的多个实例。

模型 B 只能有一个模型 A。

模型 C 可以有很多模型 A。

一个例子是一个工作委员会,雇主正在招聘一个职位,候选人正在申请并且有许多以前的职位。我希望候选人和雇主职位都来自同一个模型。

定位模式(模型A) 可以同时属于雇主和候选人

雇主模型(模型 B) 有_一个位置

候选模型(模型C) 有_很多位置

最佳答案

这是完成您在问题中描述的内容的一种方法:

class Position < ActiveRecord::Base
belongs_to :candidate
belongs_to :employer
end

class Employer < ActiveRecord::Base
has_many :positions
end

class Candidate < ActiveRecord::Base
has_many :positions
ens

请注意,一个职位一次只能属于一个雇主和一个候选人;如果你正在创建一个工作委员会,这有点荒谬——职位和雇主之间的关系可能是正确的,但候选人可能有很多申请,一个申请属于一个职位,而一个职位有很多申请。或者也可能是“收藏夹”,以便候选人可以跟踪要申请的职位列表。

您开始时使用的“理论”示例:

  • 模型 A 的一个实例可以同时属于其他两个模型(模型 B 和模型 C)的多个实例。
  • 模型 B 只能有一个模型 A。
  • 模型 C 可以有很多模型 A。

代码:

class ModelA < ActiveRecord::Base
has_many :model_bs
has_many :model_c_relationships # join table!
has_many :model_cs, through: :model_c_relationships
end

class ModelB < ActiveRecord::Base
belongs_to :model_a
end

class ModelCRelationship < ActiveRecord::Base
belongs_to :model_a
belongs_to :model_c
end

class ModelC < ActiveRecord::Base
has_many :model_c_relationships
has_many :model_as, through: :model_c_relationships
end

如果存在这样一种情况,一种类型的对象可以属于另一种对象,但另一种对象可以是几种类型中的一种,那么它可能需要多态关联。例如,StackOverflow 允许您对问题和答案进行评论。一条评论只能属于一个可评论的父对象,因此代码可能如下所示:

class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
end

class Question < ActiveRecord::Base
has_many :comments, as: :commentable
has_many :answers
end

class Answer < ActiveRecord::Base
belongs_to :question
has_many :comments, as: :commentable
end

关于ruby-on-rails - Active Record Associations——一个模型可以同时属于不同的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com