Ruby on Rails ActiveRecord: таблица с внешними ключами в больше, чем еще одной таблице

Я плохо знаком с Ruby on Rails, и я пытаюсь смоделировать свои связи между таблицами.

Для упрощения проблемы скажем, у меня есть 3 таблицы:
- Клиент (идентификатор, address_id...)
- Сотрудник (идентификатор, address_id...)
- Адрес (идентификатор...)

Модель Address имела бы следующее?

has_one :customer
has_one :employee

Я знаю, что это верно в случае единственных отношений, но я не мог найти примеры, где было два "has_one" отношения как этот.

1
задан Donald Hughes 28 February 2010 в 03:10
поделиться

1 ответ

Вы должны использовать полиморфные ассоциации, как показано ниже.

# Address model
class Address < ActiveRecord::Base
  belongs_to :addressable, :polymorphic => true
end

# Customer model
class Customer < ActiveRecord::Base
  has_one :address, :as => :addressable
end

# Employee model
class Employee < ActiveRecord::Base
  has_one :address, :as => :addressable
end

# Migration script for `addresses` table
class CreateAddresses < ActiveRecord::Migration
  def self.up
    create_table :addresses, :force => true do |t|
      t.references :addressable, :polymorphic => true, :null => false

      # add other address fields

      t.timestamps      
    end

    add_index :addresses, ["addressable_id", "addressable_type"], :name => "fk_addressable"

end

Теперь вы можете сделать следующее:

customer = Customer.new
customer.address = Address.new(:street => "ABC", :city => "SF", :zip => "46646")
customer.save

ИЛИ

employee = Employee.last
print employee.address.street
2
ответ дан 3 September 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: