![](/img/trans.png)
[英]Customize Rails Validation Message (Do not show attribute name) Rails 4
[英]devise email validation message dont show the attribute name
我正在嘗試為我的用戶 model 自定義 devise 驗證消息,唯一性列是 email。
目前顯示的錯誤消息是Email has already been taken
,我想顯示一條消息,如Trial account already assigned for this email
。 我不希望屬性鍵顯示在錯誤消息中,並且希望顯示自定義消息。
以下是我從我檢查過的帖子中嘗試過的一些事情,到目前為止我得到的最接近的是這個
我試圖像下面那樣更新en.yml
activerecord:
user:
email: ''
errors:
models:
user:
attributes:
email:
taken: 'Trial account already assigned for this email'
但是上述代碼的問題在於rails form helpers,當字段為email時,它也不會顯示label,它會消除label名稱。
我還查看了其他關於 SO 的帖子,例如
Rails 覆蓋驗證消息——為 email 添加多個驗證消息,因為我有可驗證的模塊
我還找到了此處提到的另一種替代方法, 我在哪里可以更改“電子郵件已被使用”錯誤消息?
activerecord:
errors:
messages:
taken: "Trial account already assigned for this email"
但這似乎覆蓋了所有型號,我只想為用戶 model 覆蓋它。
任何有關如何實現這一目標的幫助將不勝感激。 謝謝。
那里可能有更清潔的解決方案,但您可以做的一件事是:
在您的RegistrationsController
中,覆蓋create
以在初始驗證后訪問用戶 model
def create
super do |u|
override_taken_error(u)
end
end
然后,實現override_taken_error
以從:email
屬性中刪除:taken
錯誤,並向 : :base
屬性添加自定義錯誤:
user.errors.add :base, t('Trial account already assigned for this email')
缺點是錯誤不會直接與 email 字段相關聯。 但至少你可以創建一個可重用的override_taken_error
你甚至可以在 ActiveRecord 生命周期鈎子中使用它,比如after_save
之類的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.