0

我正在尝试创建一个对该Event模型有两个引用的Contact模型。

为什么是两个?因为 aContact可以是 typeClientOrganizer.

如何向我的Event模型添加两个外键列?

4

2 回答 2

2

我认为这就是你想要的:

class Event < ActiveRecord::Base
  has_many :clients, :class_name => 'Contact', :foreign_key => 'client_id'
  has_many :organizers, :class_name => 'Contact', :foreign_key => 'organizer_id'
end

来源:带有多个外键的 Rails 模型 has_many

于 2013-08-20T17:41:02.010 回答
1

可能不是您正在寻找的解决方案,但我认为在这种情况下使用“多态关联”是合适的。

因此,您的Contact模型将是多态关联模型,它将保留任何一个ClientOrganizer每行。

这些模型之间的关联将是:

class Event < ActiveRecord::Base
  has_many :contacts
end

class Contact < ActiveRecord::Base
  belongs_to :contactable, polymorphic: true
  belongs_to :event
end

class Client < ActiveRecord::Base
  has_many :contacts, as: :contactable
end

class Organizer < ActiveRecord::Base
  has_many :contacts, as: :contactable
end

该模型的迁移将是:

class CreateContacts < ActiveRecord::Migration
  def change
    create_table :contacts do |t|
      t.references :contactable, polymorphic: true

      # Other contacts attributes
    end
  end
end
于 2013-08-20T17:41:48.057 回答