iT邦幫忙

DAY 19
0

Ruby on Rails 花招百出系列 第 20

開始跟Rails ActiveRecord當好朋友

開啟新的Rails專案以後,第一步就是要資料庫操作開始,也就是產生model檔案。(啥?你不需要用資料庫?那用Rails幹嘛?)由於我剛開始學Rails時對資料庫的概念比較薄弱,因此從基本的地方開始說明一下資料庫是拿來幹嘛用的。

1. 為什麼Rails需要使用資料庫?

假如今天我們要儲存部落格所有的post,用.html或.rb檔案來儲存是非常沒有效率的,因為這些所有post還要依照開發者的需求來查閱、排序、修改,如果都除存在文字檔案中,用文字搜尋的方法來查找,是極其沒有效率的。

因此我們需要一個專門管理資料的系統,讓我們方便對所有資料進行操作,資料庫裡面是各種表格,就像一堆excel的表格一樣,有了這樣的架構,要查找就方便多了!

如果你真的對資料庫一點概念都沒有,建議可以在下方延伸閱讀或是Wiki、Google上大概了解資料庫的意義及目的。

2. Rails的資料庫在哪?

首先要先知道幾件事情:

  1. Rails專案資料夾內並不會有『資料庫』這個東西。
  2. 如果在安裝Ruby和Rails過程中有安裝過sqlite和mysql,這些套件才是真正的資料庫,所有table、column、內容都在裡面。
  3. 由此可知,Rails專案資料夾裡面只有讀取和操作資料庫的描述,並且Rails專案跟資料庫是可以分開的兩個東西。
  4. Rails操作資料庫的模式稱為ActiveRecord,而操作的動作稱為Migration。

如果Rails專案和資料庫是分開的,那如果在本機開發,最後佈署到伺服器上,資料庫的內容會一起佈署過去嗎?答案是不會,因為資料庫是裝在自己的電腦上,如果要一起佈署過去,必須從資料庫裡面複製資料出來,copy到伺服器上的資料庫內,這跟Rails本身就比較沒有關係了。

3. 如何開始操作資料庫?

當我們開始Rails專案開發時,都會先設定一個model,並與資料庫連結產生一個table可供儲存、讀取。通常我們會執行:

$ rails generagte model post content:text

(藍色部分為增加欄位的名稱及屬性,非必要)

這樣子我們就產生了一個叫做post的model,另外也產生了一個migration檔案。要是打開這個檔案,會看到以下畫面:

假如跟Rails不太熟悉,這個畫面其實還不太需要了解細節,但主要要知道,這個檔案就是在描述資料庫內要執行的內容。仔細看內容,會發現使用了create_table這個關鍵字,意思是他要在資料庫中建立一個table叫做posts,就像在excel裡面開一個新的空白表格一樣,用來儲存資料。

4. 如何進行Migration?

有了Migration檔案,代表Rails已經知道該怎麼去操作資料庫了,接下來我們就可以進行Migration。

Migration中文意思是遷居到某個地方,在這邊的概念比較像是我們在Rails專案當中說明我們希望資料庫要進行什麼樣的調整,接著進行migrate這個動作,把這些Rails專案內的描述『遷移』到資料庫當中,實際執行這些描述的內容。

在command line輸入:

$ rake db:migrate

就可以看到Rails跳出幾行訊息,說明migration的狀況。如果沒有錯誤訊息,那我們就成功的修改完資料庫了,可以使用以下指令進行查看。

$ rails console
$ Post.inspect (注意第一個字母大寫)
$ exit (看完以後離開)

就可以看到我們已經在資料庫中有Post這個table,裡面會儲存id和content這些資料。到此就完成Migration了,可喜可賀。

5. Migration有順序存在

Rails是依照步驟來對資料庫進行操作,已經執行過的Migration就不會再執行。例如現在我們有7個Migration檔案如下:

migrate資料夾當中的所有檔案都是Migration檔案。我們可以利用以下指令新增另一個Migration檔案:

$ rails generate migration add_index_to_posts

(藍色部分自由命名)

這個Migration就會是第8個Migration檔案,也就是說假如我們再執行一次**$ rake db:migrate**那Rails只會執行這第8個檔案,其他先前已經執行過的就不會再執行。

反之,如果資料庫需要回溯,例如發現自己加錯欄位、或是欄位命名錯誤,但我們就必須使用db:rollback指令,將資料庫回到上一個階段,並且修改我們要修改的部份,再利用db:migrate指令重新進行一次Migration。

重點在於,資料庫的更新是依靠Migration,假如今天有20個Migration檔案,那就等於有20個步驟,我們可以利用上一段提到的db:rollback來回溯到較之前的資料庫版本。

6. Schema檔案

所有Migration完成以後都會更新一次schema.rb這個檔案,裡面描述整個資料庫的table和欄位狀況,不管我們的Migration是在哪一個階段,都可以到這個schema.rb檔案當中了解目前資料庫的整體模樣。為什麼需要這個檔案呢?因為每次Migration的檔案都只會紀錄片面的增加、修改、刪除指令,沒辦法看到完整的全貌。如果這個專案需要請人來接手,其他人就可以透過這個schema.rb檔案來檢視資料庫目前的樣貌。

因此,一般來說不會需要更動這個檔案,讓他自動更新即可。

延伸閱讀

資料庫說明
ActiveRecord: 資料表操作

本文同步刊登於我的部落格:特快車


上一篇
ActiveRecord Command Line基本操作指令
下一篇
Ruby Splat(*)符號使用
系列文
Ruby on Rails 花招百出32

尚未有邦友留言

立即登入留言