今天我們就可以來實作所謂的CRUD!
中文叫做 「增刪查改」
其實滿好理解的,都是很口語化的單字。
C = Create-(新增)
R = Read---(查看)
U = Update(修改)
D = Delete-(刪除)
至於為什麼不是叫增查改刪呢?下一期我在專門做影片給大家講解(X
好啦,好像目前原因也沒有什麼統一的說法,就當是因為唸得順口吧!(攤手
而我們在網站上,要直接對資料庫進行動作都離不開這四個動詞。
例如: 寫文章、註冊用戶、付款、購票、甚至遊戲..等。
好了 我們廢話不多說來實際寫吧!!
從昨天的路徑開始!
來到config/routes.rb
原本 Rails 就會在裡面放註解,
註解的意思就是標註,
主要目的是為了讓開發人員可以添加描述、說明代碼、提供上下文,或者將臨時代碼標記為不使用,
而這些訊息不會被程式執行或渲染。
每種語言的註解符號也不一樣
#ruby的註解是放"#",<%# 這是 ERB 中的單行註解 %> ,
//這是Javascript的註解, <!-- 這是 HTML 中的註解-->
其中我們可以把 root 的註解拿掉,這樣我們就有一個文章(articles)列表(index)的頁面當作主頁了!
root "articles#index"
# 接著再寫
resources :articles
通常 resources 的命名都會是小寫複數,
對於Rails 也有一些命名的慣例需要記
Controller: articles 小寫複數(跟routes一樣) ,
但是長出來之後會是大寫複數,因為是用駝峰式寫法
Modle: Article 大寫單數
View: article.html.erb 小寫單數
我們有了路徑之後,可以先從 Model 下手
先分析一下我們需要的資料結構,就是需要那些欄位
如果是文章的話,大概就只有
string :title # 字串 標題
text :content # 文字區域 內容
前面的 string 跟 text 就會是欄位的型別
後面則是欄位的名子,所以開欄位的時候連型別也要設計好
那我們就可以下rails的指令
#如果型別是 string 的就可以不用寫在指令裡面,預設就會是string
rails g model Article title content:text
我們就創好一個 Article 的資料表了,
而 rails 會幫你長出這些東西
invoke active_record
create db/migrate/20230925165002_create_articles.rb
create app/models/article.rb
invoke test_unit
create test/models/article_test.rb
create test/fixtures/articles.yml
前兩個是跟資料表active_record有關,後兩個跟測試test_unit有關。
我們來看第一個檔案 db/migrate/20230925165002_create_articles.rb
(在編輯器中開啟檔案 (ctrl + 按一下))
第一個檔案就是我們生成這個model的時候的設定檔案,我們叫他 migration(資料遷移)檔
這時我們會生成一個還沒有確定設立的遷移檔案
每個 Migration 檔案描述了一個特定時間點上對資料庫結構所做的變更,
例如這個就是create創造,還可能會有修改、刪除。
class CreateArticles < ActiveRecord::Migration[7.0]
def change
create_table :articles do |t|
t.string :title
t.text :content
t.timestamps
end
end
end
最酷的是,每個model生成的時候,都會一起產生 t.timestamps
t.timestamps 意思就是,他會紀錄 "建立時間" 和 "更新時間"
到時候在schema可以看到。
然而這個資料結構,目前還不算是確定的版本,這就好像在寫運行的腳本一樣,
我們只有把腳本寫好而已,還沒實際運行,實際運行的話我們要輸入指令
$ rails db:migrate
這個指令,會執行全部的migration檔案,然後把最終結果寫在schema(資料庫綱要)裡面
這個指令非常重要,在團隊開發的時候,拉取隊友做好的東西的時候,
都需要確認是不是所有的遷移檔都有運行過了,不然在schema就會有衝突。
db/schema.rb
資料庫綱要,
這裡記錄了所有資料表的資料結構,
又稱作"元資料"就是指"紀錄資料的資料"
ActiveRecord::Schema[7.0].define(version: 2023_09_25_165002) do
create_table "articles", force: :cascade do |t|
t.string "title"
t.text "content"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
這裡寫的就是最終的版本了
我們可以來看第二個檔案了
app/models/article.rb
class Article < ApplicationRecord
end
"<"是代表 Article 這個class(類別) 繼承 自 ApplicationRecord 的 Ruby 類別 (class)。
這種寫法是 ActiveRecord 的慣例,用來定義一個與資料庫表格對應的模型 (Model)。