ActiveRecord Migration 初級演練
在看完先前幾篇有關ActiveRecord的解說,本篇進行一次實際操作,調整資料庫並觀看實際結果。
開啟新專案
$ rails new activerecord
建立model及資料
首先產生model檔案,開始進行資料庫管理:
$ rails g model post title:string content:text
接著我們可以使用rails console
來查看資料庫內容。如果你有sequel pro之類的GUI,也可以在裡面進行查看。不過因為我們都是初學,可以多操作練習rails console的使用方法。
$ rails c
$ Post.inspect
(在console中model的名稱第一個字母要大寫)
這時我們會發現有個Table doesn't exist的錯誤,因為我們只在Rails專案中產生檔案,卻沒有移植到資料庫中,所以這時需要先執行:
$ rake db:migrate
接著再回Rails console,重複執行上述方法,就可以看到:
以上是我們在產生model檔案時指定他為我們產生的資料庫內容,看起來無誤!
接著來產生一筆資料:
$ rails console
> Post.create(:title => "This is a post", :content => "This is content")
> Post.first
一樣這時候可以看到我們產生的資料,另外也可以用$y Post.first
來看比較有條理的排列。
產生另一個model
接著我們要在產生另一個model叫做comment,附屬於post底下:
$ rails g model comment content:text
接著進行migration將資料寫入資料庫中。
$ rake db:migrate
噗,突然想到,如果要為兩者建立關係,必須在Comment這個model中加入post_id這個欄位,為Rails提供識別。執行:
$ rake db:rollback
資料庫倒車回去,我們重新在migration檔案中加上內容,變成:
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.text :content
t.integer :post_id
# 這行是新增的
t.timestamps
end
end
end
重新執行:$ rake db:migrate
就可以囉!
若要真正為兩者建立關係,還必須在model檔案中建立關連才行。
# models/post.rb
class Post < ActiveRecord::Base
has_many :comments
end
# models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :comments
end
藉由belongsto和hasmany這種簡單明白的描述,我們就將post和comment建立起關係了。由於本篇專注講解migration的部份,往後的篇章再來詳細說明model檔案如何撰寫。
從seed產生資料
接下來我們要在資料庫中建立多筆資料,為的是平常在開發系統時,會因為設計排版、功能測試等情況,需要先有幾筆資料當做範例。
我們進入專案中的db/seed.rb
檔案,撰寫如下:
10.times do
title = "This is title"
content = "This is content"
Post.create(:title => title, :content => content)
Post.first.comments.create(:content => content)
end
以上會產生10筆內容相同的post,並且在第1筆post底下產生10筆內容相同的comment。撰寫完成存檔,回到terminal,執行:
$ rake db:seed
Rails會去執行seed.rb裡面的檔案,這時我們再進入Rails console裡面查看:
$ rails c
$ Post.all
$ Comment.all
這幾個指令都可以讓我們看到seed.rb檔案產生出來的內容。
最後,如果開發完成,需要把整個資料庫清空,可以執行:
$ rake db:drop db:create db:migrate
或者是用清空model的方式:
$ rails console
> Post.delete_all
> Comment.delete_all
以上方法二擇一執行以後,再執行檢查指令,就可以看到乾淨的資料庫囉~
這樣實際操作過一遍,各位有比較熟練了嗎?
CC圖片授權:ajmexico