iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Modern Web

Ruby新手村的礦工日記系列 第 23

[ Day 23 ] Rails 中的 Model 基本與 CRUD (上)

  • 分享至 

  • xImage
  •  

前幾章有提到 controller 會跟 model 拿資料,新手階段的我常常會把它跟資料庫 (Database) 搞混。
所以要特別注意以下的觀念:

Model 不是資料庫(Database)也不是資料表(Table) , Model 是一個負責跟實體的資料表溝通的抽象類別,負責跟實體的資料表溝通。

Model 其實也是一個翻譯人員,他會把 Controller 說的話翻譯成 Database 看得懂的語言 (SQL),進而在 Database 拿取我們要的資料。

資料表 (table) 命名

上一個章節,有說明 Controller 命名慣例,在 Model 中也是一樣。
在 Rails 中, Model 的命名是單數,且字首要大寫;資料表 (table) 預設使用複數,且小寫並用底線分隔方式命名,如下:

Model 資料表 (table)
User users
Post Posts
LineItem line_item
Mouse mice

名詞介紹?

介紹 CRUD 前,有些名詞是你需要知道的。

Active Record ?

Active Record 是 MVC 的 M(Model),主要負責處理商業邏輯和資料。Active Record 負責新增與操作存在資料庫裡的資料。Active Record 本身是 ORM 系統的描述,並以 Active Record 模式實作。

Active Record 功能

Active Record 給了許多功能,以下整理幾個比較重要的:

  • 表示 Model 與資料。
  • 表示 Model 之間的關係。
  • 表示相關 Model 之間的繼承關係。
  • 持久化資料存入資料庫的驗證。
  • 以物件導向的風格操作資料庫。

什麼是 ORM ?

當提到 Model 就不得不提 ORM,那 ORM 是什麼呢?
Object–relational mapping 縮寫為 ORM,中文稱“物件關係對映”。
簡單來說,就是你不用自己寫資料庫查詢語言 (SQL) 對資料庫進行查詢,可以透過 ORM 的包裝之後,以操作物件的方式來操作資料庫。例如:

User.all

透過 ORM 翻譯之後:

select * from users;

CRUD

CRUD 為四個動作的名稱簡寫而來,分別為:

  • Create(建立):建立新資料。
  • Read(讀取):讀取資料,並查詢資料內的內容。
  • Update(更新):更新指定欄位的資料。
  • Delete(刪除):刪除資料。
    以上這些都是我們在 Rails 專案中常會使用到的,所以這個非常重要。

實做基本的 CRUD

現在我們開始用剛剛提到的 ORM 來實作 CRUD 吧!

新增 Model

在開始前,先建立一個 Book 的 Model 吧!
通常我會在終端機打以下指令:

$ rails g model Book name:string content:text

這樣它會幫我定義兩個欄位:

欄位名稱 資料型態 說明
name 字串 (string) 書名
content 文字 (text) 簡介

執行後,他會幫我製作出這些檔案:
book model
這時,我們可以到 db/migrate/20221008144802_create_books.rb 這個檔案看一下裡有什麼:

class CreateBooks < ActiveRecord::Migration[6.1]
  def change
    create_table :books do |t|
      t.string :name
      t.text :content

      t.timestamps
    end
  end
end

你一定會好奇,這是什麼檔案呢?
當我們建立 Model 時,Rails 會自動幫你產生出對應的 Migration 檔案,而這個檔案會幫你記錄建立 table 的過程,以及建立了哪些欄位。
到這邊還不算真正的把資料表建立出來,我們必須將 Migration 轉換成真正的表格,我們在終端機輸入:

$ rails db:migrate

這樣才真正的把資料表建立完成。
這時候,我們可以到 app/db/development.sqlite3 看到實際有的欄位:
SQL lite3
你會發現上面除了 name 跟 content 這兩個欄位以外,還多了 idcreated_atupdated_at 這三個欄位。事實上,在 Migration 檔案中的 t.timestamps ,在經過轉換之後,會產生兩個名為 created_at 跟 updated_at 的時間欄位,分別會在資料「新增」及「更新」的時候,把當下的時間寫入。

參考資料:

  1. 為你自己學 Ruby on Rails
  2. Rails Guides
  3. 維基百科-ORM

上一篇
[ Day 22 ] Rails 中的 Controller 跟 View !!
下一篇
[ Day 24 ] Rails 中的 Model 基本與 CRUD (下)
系列文
Ruby新手村的礦工日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言