iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Software Development

Rails Active Model系列 第 17

D-17 Active Model errors - 1

  • 分享至 

  • xImage
  •  

再來要聊聊很基本的東西 - errors。

這個東西呢,只要在你的 model validation 沒有通過的話,就一定會產生錯誤訊息。
這是普遍對他的認知。然而事實上是相反的,應該是:
只要在 validation 階段往 errors 裡面塞訊息,就會導致 model validation 不通過。

因為 valid? 內部實作,結尾回傳值是

  errors.blank?

所以不管你在 validation 階段往裡面塞什麼訊息,valid? 都會回傳 false。

如果想要往 errors 裡面加訊息,大多數人都會使用

  errors.add(:name, :blank)

但其實,他背後會去檢查你的物件是否有 name 這個 method。

那這其實也代表,validation 的對象其實不僅只於欄位,也可以是某個 method 的回傳值,像是:

class User < ApplicationRecord
  # 要有下單才建立顧客資料
  validates_presence_of :orders

  def orders
    # 撈取顧客訂單資料
  end
end

這樣就可以讓 orders 這個 method 不僅只是用來撈訂單,更可以用在 validation 上。

好,回到 errors。
如果我很想要往我的 errors 塞入自訂訊息,並且不檢查是否有 method,我該怎麼做?
很簡單,Rails 在 errors 提供了一個 :base 的 key,只要你的 key 指定為 :base ,那 errors 就不會去做 method 的檢查。

  errors.add(:base, "My custom message")

下一篇再介紹 errors 的 I18n 翻譯規則~。


上一篇
D-16 如何讓你的 object 在 console 裡好看一點?
下一篇
D-18 Active Model errors - 2
系列文
Rails Active Model28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言