ActiveRecord 基礎


ActiveRecord是Rails的物件/關聯映射(Object/Relational Mapping, ORM)解決方案,可以物件角度來進行資料庫操作,將物件與物件關係,映射至關聯資料庫表格與表格的關係,Rails的ActiveRecord方案實現了ActiveRecord 模式,物件本身代表資料表格中的一筆資料,物件本身攜帶資料庫存取的相關操作方法。

先前在 MVC 與 Rails 中曾略為看過ActiveRecord的一些使用,當你使用rails generate model產生指定的資料庫模型物件時,會產生幾個檔案:

\$ rails g model message name:string content:text is_read:boolean
      invoke  active_record
      create    db/migrate/20111214072231_create_messages.rb
      create    app/models/message.rb
      invoke    test_unit
      create      test/unit/message_test.rb
      create      test/fixtures/messages.yml

以上例而言,*_create_messages.rb記錄了稍後執行db:migrate時要作的動作,其中*是時間標記,用以避免名稱衝突,就之前的指令主要是建立新表格:
  • *_create_messages.rb
class CreateMessages < ActiveRecord::Migration
  def change
    create_table :messages do |t|
      t.string :name
      t.text :content
      t.boolean :is_read

      t.timestamps
    end
  end
end

create_table方法指定建立messages表格,在程式區塊中分別指定t.string、t.text、t.boolean等建立了name、content、is_read欄位,t.timestamps則會自動建立created_at與updated_at兩個欄位,每個表格也會有個自動增生的id欄位作為主鍵。為了執行*_create_messages.rb的內容以建立表格,需要執行db:migrate任務:

~/hello\$ bundle exec rake db:migrate

使用的SQL可在log/development.log中查到:

CREATE TABLE "messages" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    "name" varchar(255),
    "content" text,
    "is_read" boolean,
    "created_at" datetime,
    "updated_at" datetime
)