Rails: нужна помощь в определении связи для таблицы адресов - PullRequest
1 голос
/ 15 июня 2011

Я нашел это немного сумасшедшим и хотел бы некоторые идеи. Мой дизайн выглядит так:

  • Существует таблица строителей, каждый строитель может иметь почтовый адрес
  • Существует таблица клиентов, каждый клиент может иметь почтовый адрес и адрес для выставления счета
  • Есть таблица адресов

Мне нужно определить связи между адресами строителей и адресами клиентов.

Мой первоначальный дизайн базы данных был таким:

Builders
--------------------
id
postal_address_id
...

Clients
--------------------
id
postal_address_id
billing_address_id
...

Addresses
-------------------
id
...

Это кажется мне логичным, но у меня возникают проблемы с переводом этого в рельсовые ассоциации.

Я думаю, что адреса могут определять полиморфную ассоциацию Address_to: Addressable. Но как мне обращаться с почтовыми и платежными адресами для клиентов.

Любая помощь будет высоко ценится.

Ответы [ 2 ]

8 голосов
/ 15 июня 2011

В таком случае я бы использовал STI (наследование одной таблицы), я думаю, что это идеальный случай для этого.

Во-первых, вам нужно добавить поле "тип" в вашу модель адреса.
Тогда вы можете определить свои классы следующим образом:

class Client
  has_one :billing_address, :as => :addressable
  has_one :shipping_address, :as => :addressable
end

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

class BillingAddress < Address
end

class Shipping Address < Address
end

Узнайте больше о STI в документации по рельсам

4 голосов
/ 15 июня 2011

Вы можете просто иметь столбец address_type в таблице addressable. Затем вы можете определить ассоциации следующим образом:

class Client
  has_one :biling_address, :as => :addressable, :conditions => {:address_type => "billing"}
  has_one :shipping_address, :as => :addressable, :conditions => {:address_type => "shipping"}
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...