iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Software Development

Rails Active Model系列 第 19

D-19 Active Model errors - 3

  • 分享至 

  • xImage
  •  

上一篇介紹過 errors 對於處理翻譯的 attribute 部分,接著來聊聊 message 的部分。

首先第一個大原則:傳入 symbol 才會翻譯,傳入 string 則不會
把上一篇的範例 code MyCls 拿來用:

class MyCls
  include ActiveModel::Model
  attr_accessor :name
end

接著我可能在某些 validation method 裡面往 errors 裡面塞入訊息:

obj = MyCls.new
obj.errors.add(:name, :blank)
obj.errors.add(:name, "My custom message of NAME")
obj.errors.add(:base, "My custom message of BASE")
obj.errors.add(:name, :hello)

依序得到 error message 如下:

Name can't be blank

:blank 是 Rails 內建的 error message,給 presence 用的,所以能翻譯得出來

Name My custom message of NAME

要注意的是英文語法的部分,因為翻譯出來會先冠上 attribute name,所以自訂義 error message 的部分開頭要小寫比較好。

My custom message of BASE

:base則沒有上述這煩惱,因為 :base 會直接被忽略不秀出來。

translation missing: en.activemodel.errors.models.my_cls.attributes.name.hello

如果你想要自行規劃翻譯檔,看到這串 translation missing,可能很直覺就想要照他的結構去規劃像這樣:

en:
  activemodel:
    errors:
      models:
        my_cls:
          attributes:
            name:
              hello: "Hello"

這樣規劃不是不行,但如果你想要共用翻譯的話,還有更好用的結構。
下一篇結合前一篇的 attribute 部分一起來聊聊翻譯的 yaml 檔可以怎樣規劃。


上一篇
D-18 Active Model errors - 2
下一篇
D-20 Active Model errors - 4
系列文
Rails Active Model28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言