本文章範例跟文字許多引述自 Rails Guide,想參觀的可以看這裡
為什麼需要驗證?
先來說說為什麼需要驗證?
因為我們並不想要資料庫裡面存一些沒有用的資料,必須要限定這些資料至少符合特定的標準才允許寫進資料庫
寫驗證前需知道的事
-
在 Rails 中驗證是寫在 model level,如果沒有通過驗證就完全不會碰到資料庫
-
new_record?
用來確定這筆資料是不是已經寫入資料庫 -
我們也可以用
valid?
invalid
這兩種方法看這個實體是否有效 (在未被寫入之前)
1 | p = Person.new |
-
如果用的是 create 或者 update 在 SQL 裡使用的是
INSERT
方法,如果是用update
則是UPDATE
方法 -
存入資料庫的方法有下面幾種
1 | create |
這些驚嘆號方法會導致寫入失敗的話跳出 exception,如果不捕捉的話頁面會壞掉,非驚嘆號版本則不會
在這方法後面我們可以用 validate: false
使他繞過驗證,這通常是用在開發的時候,使用時須小心
1 | save(validate: false) |
看錯誤訊息
我們在資料無法存入的時候,可以使用 errors.messages
看無法存入的原因
1 | class Person < ApplicationRecord |
Validation Helpers
Rails 已經寫好一些常用的驗證方法給我們使用,在這些 helpers 後面我們都可以再加上 :on
跟 :message
這兩種屬性,決定他們要用在哪裡,還有存取失敗的時候會存進怎樣的訊息到 errors 中
Acceptance
這種驗證最常用在看完條款,要打勾的那種時候,如果不打勾無法繼續往下
1 | class Person < ApplicationRecord |
Validates_associated
在 model 之間互有關聯的時候,有時候會需要確定兩邊都有存入資料才算成功,這時候可以使用這個驗證
1 | class Library < ApplicationRecord |
要注意不能兩邊的 model 都寫,不然會進入無窮迴圈
Confirmation
這個驗證通常用在需要重複輸入信箱或密碼的時候,驗證你第二次輸入的內容是不是符合一開始的內容
1 | class Person < ApplicationRecord |
接著我們就可以在 view 的頁面這樣寫
1 |
|
Exclusion
exclusion 用在限制不讓使用者寫進特定資料
1 | class Account < ApplicationRecord |
in
這個屬性裡面放陣列,陣列裡面的就是不讓使用者寫進去的資料
Format
format 用在限制資料的格式,這通常會搭配常規表示法使用
1 | class Product < ApplicationRecord |
除了 with
這個屬性,我們還可以使用 without
Inclusion
inclusion 是剛剛 exclusion 的相法,如果內容不包含特定的字就無法寫入
1 | class Coffee < ApplicationRecord |
相關的 helpers 還很多,明天會陸續介紹喔!今天就先介紹到這邊~
參考資料: