ROR [Note.6 ]操作資料庫Model
(一)資料庫操作練習
(詳細的操作,可以觀看iHower大神的教學影片https://www.youtube.com/watch?v=VdvYJ3h2cdU)
透過以下指令進入 Rails的controller來操作資料庫的Model
透過以下指令進入 Rails的controller來操作資料庫的Model
$rails c
如果要離開controller,輸入「exit」即可。
上次已經建立了一個Model「Event」 與 資料表「events」
在Rails而言每個model都對應一個資料表
建立一筆資料
e = Event.new
賦予值 (把欄位直接當屬性來使用)
e.name = "aaaaa" (把欄位直接當屬性來使用)
正式寫入資料庫(沒有使用save前,都不算寫入到資料庫)
e = e.save
查詢一筆資料(1代表資料的唯一ID)
a = Event.find(1)
查詢3筆資料(capacity>=100的資料,按照降冪排序,a為陣列)
a = Event.where(["capacity >= ?" , 100]).limit(3).order("id desc")接.當屬性來使用)
取得第一筆資料
a = Event.first接.當屬性來使用)
取得最後一筆資料
a = Event.last
(二)資料驗證(ActiveRecord)
資料驗證,在Rails上也是一件看起來很方便的事情
資料驗證,在Rails上也是一件看起來很方便的事情
在上次使用$rails g model指令產生了二個檔案
(1)app/model/event.rb 一個ActiveRecord (資料驗證用)
(2)db/migrate/時間搓記.rb 一個migration (資料庫的定義檔)
通常我們在做一些類似資料填寫的時候。
都需要判斷是否該資料有確實填入或是進行一些轉換。
而ActiveRecord就能做到這件事情。
validates_presence_of (用來判斷資料是否空值)
上圖加入了這行「validates_presence_of :name」以後,在資料寫入的過程,就會去判斷name這個欄位是否是空值。
如果name的欄位是空值,則該筆資料再save的時候就會回傳失敗,且不會寫入資料庫。
(可以使用 e.errors 或是 e.errors.full_messages 來查詢錯誤原因)
(1)app/model/event.rb 一個ActiveRecord (資料驗證用)
(2)db/migrate/時間搓記.rb 一個migration (資料庫的定義檔)
通常我們在做一些類似資料填寫的時候。
都需要判斷是否該資料有確實填入或是進行一些轉換。
而ActiveRecord就能做到這件事情。
validates_presence_of (用來判斷資料是否空值)
上圖加入了這行「validates_presence_of :name」以後,在資料寫入的過程,就會去判斷name這個欄位是否是空值。
如果name的欄位是空值,則該筆資料再save的時候就會回傳失敗,且不會寫入資料庫。
(可以使用 e.errors 或是 e.errors.full_messages 來查詢錯誤原因)
-----------------------------------------------------------------------------------------------------------------------
(三)正式操作
了解了資料庫的建立以及資料驗證的機制,
接下來就正式開始操作資料庫。
目的:做出能夠讓資料庫顯示資料的頁面
(1)重新建立一個Controller
$rails g controller event
get "event"=> "event#index"
(3)撰寫Controller的Action
宣告了一個變數@events,把「Event」所有的資料都抓出來
@是為了能讓Template能夠抓到該變數的值
(4)撰寫前台頁面(index.html.erb)
在views/event底下創建一個index.html.erb的頁面
並且將代碼加入
在這裡將controller剛剛定義@events, 用了一個for each的迴圈,
將每一筆資料倒出。並且打印出來
<% %> 是rails能夠在前台執行後台的一個標籤
<%= %>加了「=」則可以將內容的資訊打印出來 (類似php的 echo)
此範例也可以看出 Rails的For each,是需要加一個end,來告訴它到哪裡是結尾
<%= @events.each do |e| %>
<%= e.name %>
<% end %>
<%= @events.each do |e| end%>
這二行效果一樣的,只是第一段會將每一筆打印出來
張貼留言