coding with alpaca -45 建立 order model, 並與 user 和 purchase 產生關聯

rails g model order

寫 migration,讓 order table 下有 user_id 跟 purchase_id 的欄位

create_table :orders do |t|
t.belongs_to :user, index: true
t.belongs_to :purchase, index: true
  t.timestamps
end

跑 rails db:migrate

到 order.rb,建立 order 與 user 和 purchase 的關聯

class Order < ApplicationRecord
  # relationship
belongs_to :user
belongs_to :purchase
end

order 跟 item 是多對多的關係

rails g model ordered_item,這是一個 join table, 記錄每筆訂單所訂的商品

這個 table 只是單純紀錄兩個資料表的關係,不用 timestamp

寫 migrate:

create_table :ordered_items do |t|
  t.belongs_to :order, index: true
t.belongs_to :item, index: true
t.integer :quantity
end

ordered_item.rb

belongs_to :order
belongs_to :item

order.rb

has_many :ordered_items

item.rb

has_many :ordered_items

如果想要在 order 裡面直接看到關聯的商品,修改 order.rb:

has_many :items, through: :orderd_items

當 migration 欄位寫錯時

rails db:rollback

修改 migration 欄位

重跑 rails db:migrate

總的來說步驟:

  1. rails g model order
  2. 寫 migration
  3. 跑 migration
  4. 到 order.rb 建立 order 與 user 和 purchase 的關聯
  5. rails g model ordered_item
  6. 寫 migrate
  7. 跑 migrate
  8. 到 ordered_item.rb 建立 ordered_item 與 order和 item的關聯
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.