2017-02-03 3 views
0

Я редко вижу полиморфный дизайн в отношении has_one в схеме db.Рельсы; 1: 1 в полиморфном

Я просто хотел бы достичь 1:1 отношений между invoice_item к другим (subscripiton_item или usage_item).

Я знаю, что полиморфное отношение не является хорошим дизайном.

Как я мог достичь отношений 1: 1 без полиморфных?

Должен ли я сделать FK либо также PK (который гарантирует уникальность), либо наложил на него уникальное ограничение?

SubscriptionItems 
-------- 
- id 
- title 
- period_start 
- period_end 

UsageItems 
-------- 
- id 
- title 
- description 


InvoiceItems 
-------- 
- id 
- itemable_id 
- itemable_type (either a subscription_item *or* a usage_item) 

ответ

0

SubscriptionItem

#model subscription_item.rb 
    --- 
    has_one :invoice_item 
    --- 

UsageItem

#model usage_item.rb 
    --- 
    has_one :invoice_item 
    --- 

InvoiceItems

#model invoice_item.rb 
    --- 
    belongs_to :usage_item, :class_name => 'UsageItem', :foreign_key => 'usage_item_id' 
    belongs_to :subscription_item, :class_name => 'SubscriptionItem', :foreign_key => 'subscription_item_id' 
    --- 
+0

Я хотел бы, чтобы убедиться, что invoice_item принадлежит либо usage_item или subscription_item. – Tosh