嗨,大家好!被翻爛的書掙扎一番後終於寫下了Day 2 的文章囉!
今天的任務是要先將練習用專案準備好,以便後續研究、練習Active Record 的query 方法,因此也不能少了資料庫的資料,所以就請各位一同先把專案new 出來,並準備好兩張資料表吧!
# new 專案
rails new rookie_sql
# 因目前筆者電腦的rails version 還是6.0.6,如果要跟爛書用一樣的版本,可以指定rails 版本new 專案
rails _6.0.6_ new rookie_sql
# 此外因為未來想練習的資料庫以postgres 為主,也可以在後方加參數--database=postgresql 指定以pg 為資料庫
rails _6.0.6_ new rookie_sql --database=postgresql
好了之後我們就下指令來產生資料表吧!
# 記得先cd 到專案內
cd rookie_sql
# 建立第一個資料表:筆者想建立個生態系統的物種關聯表,注意Model 是用單數:
rails g model Podcast name:string genres:integer host:text introduction:text
好了後應該可以看到migration:
class CreatePodcasts < ActiveRecord::Migration[6.0]
def change
create_table :podcasts do |t|
t.string :name
t.integer :genres
t.text :host
t.text :introduction
t.timestamps
end
end
end
確認各個欄位的名稱和形態沒問題後,就大膽migrate
rails db:migrate
== 20220916145623 CreatePodcasts: migrating ===================================
-- create_table(:podcasts)
-> 0.0076s
== 20220916145623 CreatePodcasts: migrated (0.0076s) ==========================
若有還需要調整的地方,如被翻爛的書想將host 的欄位形態調整成string,便需先用rollback 將Db revert 回到migrate 前的狀態:
rails db:rollback
== 20220916145623 CreatePodcasts: reverting ===================================
-- drop_table(:podcasts)
-> 0.0041s
== 20220916145623 CreatePodcasts: reverted (0.0078s) ==========================
接著再次執行:rails g model Podcast name:string genres:integer host:string introduction:text
及rails db:migrate
執行完這步便能在generate 一個名為Podcast Model 的同時,建立一個同名的table;
接著也能到db/schema.rb 查看資料表的狀況:
create_table "podcasts", force: :cascade do |t|
t.string "name"
t.integer "genres"
t.string "host"
t.text "introduction"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
最後就是重複以上動作建立另一張表,以完成今天的任務,同時構思資料內容要怎麼假造;
明天就能開始seeding database 了!