Связи DataMapper, которые зависят от двух столбцов - PullRequest
2 голосов
/ 07 сентября 2011

У меня есть таблица продуктов с такими атрибутами, как SKU, Имя и т. Д.

Похоже, мне нужно иметь отдельные таблицы для каждой категории продуктов из-за большого разнообразия функций в зависимости от категории.

Скажем, у меня есть стол / класс для сапог, инструментов и шляп

Я бы хотел (если нет лучшего способа) присоединить / связать мою таблицу продуктов с другими таблицами, где это необходимо (в зависимости от категории)?

Products Table  

id | Name   | SKU | Category(Table) | CategoryTableForeignKey
----------------------------------------------------------------------
1  | boot1  | 123 | Boots           | 2
2  | knife1 | 345 | Tools           | 42

-

Boots Table

id | product_id   | Size | Width | Color | Sex
----------------------------------------------------------------------
2  | 1            | 9.5  | Wide  | Olive | Male

-

Tools Table

id | product_id   | length | Fixed | Coating | Etc
----------------------------------------------------------------------
42 | 2            | 4.5    | False | ...     | ...

Я не уверен, как это сделать с классами DataMapper.

В идеале я хотел бы иметь возможность:

my_boot = Boots.get(1)

my_boot.product.sku

Редактировать: dkubb указал на ошибку в моем коде.

Ответы [ 2 ]

1 голос
/ 07 сентября 2011
class Product
  include DataMapper::Resource
  #descripe product properties ...

  has n,  :boots
end

Class Boot
  include DataMapper::Resource
  #describe boot properties ...

  belongs_to :product
end

Об ассоциациях DataMapper: http://datamapper.org/docs/associations.html

1 голос
/ 07 сентября 2011

Когда вы используете has(), вы говорите, что внешний ключ находится в другой модели.Если вы хотите, чтобы внешний ключ был в таблице, связанной с текущей моделью, вы хотите использовать belongs_to.

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