2017-02-24 2 views
0

Ich habe eine App, wo ein Kunde eine Bestellung aufgeben kann, um Elemente an ein Ziel zu senden. Die Bestellung muss sowohl die Kunden- als auch die Zieladresse verfolgen.Hinzufügen von Bestellung erschwert Active Record Associations

Ich beginne mit den folgenden Active Record Verbände:

CUSTOMER 
has_one :customer_address 

CUSTOMER_ADDRESS 
belongs_to :customer 

DESTINATION 
has_one :destination_address 

DESTINATION_ADDRESS 
belongs_to :destination 

Jetzt habe ich das Konzept eines Auftrags hinzufügen möchten.

Also mache ich die folgenden Änderungen:

CUSTOMER 
has_one :customer_address 
has_many :orders 

CUSTOMER_ADDRESS 
belongs_to :customer 

DESTINATION 
has_one :destination_address 

DESTINATION_ADDRESS 
belongs_to :destination 

ORDER 
belongs_to :customer 
has_one :customer_address, through: :customer 
has_one :destination_address, through :destination 

Zwei Fragen:

  1. Es gibt keine symmetrischen belongs_to für die beiden has_one Verbände in Ordnung. Dies scheint falsch zu sein, aber es macht auch keinen konzeptionellen Sinn für einen Kunden oder ein Ziel, eine Bestellung, zum Teil, da es viele Bestellungen und nur eine Adresse für einen Kunden oder ein Ziel gibt.

  2. Was ist die korrekte Migration für ORDER?

Vielen Dank im Voraus.

Antwort

0

Die Migration würde wie folgt aussehen:

class CreateOrder < ActiveRecord::Migration 
    def change 
    create_table :orders do |t| 
     t.string :name 
     # add price, products etc. 
     t.integer :destination_id 
     t.timestamps 
    end 
    end 
end 

Sie benötigen auch eine Join-Tabelle viele customers zu viele orders zu verbinden. Etwas wie dieses:

class CreateCustomerOrders < ActiveRecord::Migration 
    def change 
    create_table :customer_orders do |t| 
     t.integer :customer_id 
     t.integer :order_id 
     t.timestamps 
    end 
    end 
end