具有多个外键的DB链接到不同属性上的相同模型

时间:2016-10-29 10:32:40

标签: sql ruby-on-rails model foreign-keys

我在建立数据库关系方面遇到困难,如果有人能给我一点帮助,我会非常感激!

我有一个名为的表,另一个名为公司公司有很多人人员属于公司

这里的技巧公司has_many Person投掷了一个名为person 属性,has_many Person投掷了另一个名为administrator的属性

可以看得像

Coca-cola = Company.new
jonathan = Person.new / nicolas = Person.new
Coca-cola : { 
person: jonathan,nicolas
administrator: nicolas
}

我做了第一次迁移:

def change
 add_reference :persons, :person, index: true
 add_reference :persons, :administrator, index: true

 add_foreign_key :persons, :companys, column: :person_id
 add_foreign_key :persons, :companys, column: :administrator_id
end

然后我将此关系添加到我的模型

class Company < ApplicationRecord
  has_many      :persons,
  :class_name => "Person",
  :foreign_key  => "person_id"

  has_many      :administrators,
  :class_name => "Person",
  :foreign_key  => "administrator_id"
end

class Person < ApplicationRecord
  belongs_to    :person,
  :class_name => "Company",
  optional: true

  belongs_to    :administrator,
  :class_name => "Company",
  optional: true
end

不幸的是,这不起作用,导致问题的任何导致?

非常感谢。

乔纳森。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,请告诉我。要求是:

  • Person belongs_to Company
  • 公司has_many人
  • 公司has_many管理员

我猜您可以使用以下代码解决:

class ChangePersons < ActiveRecord::Migration
  def change
    add_column :persons, :administrator, :boolean, default: false
  end
end

class Company < ApplicationRecord
  has_many :persons, -> { where(administrator: false) }

  has_many :administrators,
    class_name: "Person",
    foreign_key: "person_id",
    -> { where(administrator: true) }
end

class Person < ApplicationRecord
  belongs_to :company
end