首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Ruby on Rails 開發從頭來(三十七):ActiveRecord 基礎入門

     編輯:Java 相關知識

什麼是 ActiveRecord?

ActiveRecord 是 Rails 內建的物件關聯映射(ORM)層,遵循 Martin Fowler 的 Active Record 模式:

  • 資料表 ↔ 類別
  • 資料列 ↔ 物件
  • 欄位 ↔ 物件屬性

與傳統 ORM 大量依賴 XML 配置不同,ActiveRecord 採用「慣例優於配置」,極大減少樣板程式碼。

五分鐘上手範例

require "rubygems"
require_gem "activerecord"

# 建立資料庫連線
ActiveRecord::Base.establish_connection(
  :adapter  => "mysql",
  :host     => "localhost",
  :database => "railsdb"
)

# 定義模型(零配置)
class Order < ActiveRecord::Base
end

# 使用模型
order = Order.find(123)
order.name = "Dave Thomas"
order.save

無任何映射配置檔,ActiveRecord 自動推斷表名、欄位、主鍵等。

表名與類別命名慣例

類別名推斷表名
Orderorders
LineItemline_items
TaxAgencytax_agencies
Personpeople
Diagnosisdiagnoses
Quantityquantities
Batchbatches
Datumdata

規則:類別單數、表名複數;多字類別以底線分隔(蛇形命名)後複數化。不規則複數(如 Person→people)內建支援。

全域關閉複數化

# config/environment.rb
ActiveRecord::Base.pluralize_table_names = false

個別覆寫表名

class Sheep < ActiveRecord::Base
  set_table_name "sheep"  # 避免變成 sheeps
end

class Order < ActiveRecord::Base
  set_table_name "ord_rev99_x"  # 對接舊有資料表
end

ActiveRecord 如何運作?

  1. 繼承基類:class Order < ActiveRecord::Base 觸發元程式設計機制。
  2. 推斷表名:依命名慣例轉換類別名為表名(可覆寫)。
  3. 反射資料庫結構:啟動時查詢 information_schema 取得欄位、型別、主鍵等中繼資料。
  4. 動態定義屬性方法:為每個欄位動態產生 attr_accessor 風格的讀寫方法。
  5. 提供 CRUD 類別/實例方法:find, save, destroy 等。

下一步學習重點

  • 關聯關係(has_many, belongs_to 等)
  • 驗證(validates_presence_of 等)
  • 回呼(before_save, after_create 等)
  • 遷移與結構版本控制
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved