Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 活动记录关联-一个模型可以同时属于不同的模型_Ruby On Rails_Database_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails 活动记录关联-一个模型可以同时属于不同的模型

Ruby on rails 活动记录关联-一个模型可以同时属于不同的模型,ruby-on-rails,database,activerecord,rails-activerecord,Ruby On Rails,Database,Activerecord,Rails Activerecord,对于以下情况,创建活动记录关系的正确方法是什么- 模型a的一个实例可以同时属于其他两个模型(模型B和模型C)的多个实例 型号B只能有一个型号A 型号C可以有许多型号A 一个例子是工作委员会,其中一个雇主正在为一个职位招聘,而候选人正在申请,并且有许多以前的职位。我希望应聘者和雇主的职位都来自同一个模式 位置模式(A型) 可以同时属于雇主和候选人 雇主模式(模式B) 你有一个职位吗 候选模型(模型C) 你有很多职位这里有一种方法可以完成你在问题中所描述的: class Position <

对于以下情况,创建活动记录关系的正确方法是什么-

模型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
代码:

classmodela
如果存在一种情况,其中一种类型的对象可以属于另一种对象,但另一种对象可以是几种类型中的一种,那么它可能需要多态关联。例如,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
class注释
这个模型图没有多大意义-为什么雇主只能有一个职位?多态关系呢?您什么时候会使用此功能?多态关系适用于存在共享资源的情况。例如,假设您有一个带有。。。。问题和答案-就像这样!一个问题或一个答案都可以得到投票、评论和喜爱(明星)。因此,这些对象中的任何一个都可能有一个
属于
多态性关系,并且有一个“星号”、“评论”或“投票”对象,可以是一个问题,也可以是一个答案。@mferg我已经用一个多态性关联的示例更新了我的答案很棒。有道理。干杯
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