簡體   English   中英

devise email 驗證消息不顯示屬性名稱

[英]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

(見https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb#L16

然后,實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM