Ruby on Rails ActiveRecord: таблица с внешними ключами в нескольких других таблицах - PullRequest
1 голос
/ 28 февраля 2010

Я новичок в Ruby on Rails и пытаюсь смоделировать свои таблицы отношений.

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

Будет ли модель адреса иметь следующее?

has_one :customer
has_one :employee

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

1 Ответ

2 голосов
/ 28 февраля 2010

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

# 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

OR

employee = Employee.last
print employee.address.street
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...