Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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 具有相同模型的Rails关联_Ruby On Rails_Associations - Fatal编程技术网

Ruby on rails 具有相同模型的Rails关联

Ruby on rails 具有相同模型的Rails关联,ruby-on-rails,associations,Ruby On Rails,Associations,我有两个班,有以下联系: class Incident has_one :assignee has_one :technician class User has_many :incidents 请注意,Assignment和technician字段指的是User类型的对象。这些关系在模型中应该是怎样的?假设事件应该属于受让人和技术人员,因为保存这些关系的外键将在事件表中,而不是员工表中 class Incident belongs_to :assignee, :class_

我有两个班,有以下联系:

class Incident
  has_one :assignee
  has_one :technician

class User 
  has_many :incidents

请注意,Assignment和technician字段指的是User类型的对象。这些关系在模型中应该是怎样的?

假设事件应该属于受让人和技术人员,因为保存这些关系的外键将在事件表中,而不是员工表中

class Incident belongs_to :assignee, :class_name => 'User' belongs_to :technician, :class_name => 'User' class User has_many :assigned_incidents, :class_name => 'Incident', :foreign_key => 'assignee_id' # not sure the wording you'd want to use for this relationship has_many :technician_incidents, :class_name => 'Incident', :foreign_key => 'technician_id' 班级事件 属于:受让人,类别名称=>'User' 属于:技师,:class\u name=>“用户” 类用户 有多个:已分配的事件,:类名称=>'事件',:外键=>'受让人id' #不确定您希望用于此关系的措辞 有很多:技师事件,:class\u name=>“事件”;:foreign\u key=>“技师id”
您可能希望外键字段为
事件。受让人id
事件。技术人员id

以下是此问题的完整答案,以防访问此问题的人很难将所有内容放在一起(就像我第一次研究此问题时那样)

答案的某些部分发生在您的迁移中,有些则发生在您的模型中:

迁移 以下是您的用户模型:

class User < ActiveRecord::Base
  has_many :assigned_incidents, :class_name => 'Incident', :foreign_key => 'assignee_id'
  has_many :incidents_as_technician, :class_name => 'Incident', :foreign_key => 'technician_id'
end
执行上述任一操作都将返回事件模型的实例数组

class Incident < ActiveRecord::Base
  belongs_to :assignee, class_name => 'User'
  belongs_to :technician, class_name => 'User'
end
Incident.assignee.name
Incident.technician.email
class User < ActiveRecord::Base
  has_many :assigned_incidents, :class_name => 'Incident', :foreign_key => 'assignee_id'
  has_many :incidents_as_technician, :class_name => 'Incident', :foreign_key => 'technician_id'
end
User.assigned_incidents
User.incidents_as_technician