如何将 mongoid 错误消息更改为自定义消息?

问题描述 投票:0回答:1

在我的应用程序中,我向用户提供“订阅”主题。如果他们已经订阅,我希望能够显示自定义消息。

我使用 mongoid 在我的 Rails 模型中进行了唯一性验证。

class Subscription
  include Mongoid::Document
  include Mongoid::Timestamps
  field :email, type: String
  field :confirmed, type: Mongoid::Boolean, default: false
  belongs_to :topic

  validates_uniqueness_of :email

end

在我的控制器中,我正在评估可能的错误消息:

  def subscribe
    ...

    respond_to do |format|
      if @subscription.save
        ...
      else
        format.html { redirect_to topic_url(@topic), alert: "Subscription was not created. #{@subscription.errors.full_messages[0]}" }
        ...
      end
    end
  end

通过“@subscription.errors.full_messages[0]”返回的错误消息是:

  • “电子邮件已被占用”

我想将其更改为自定义消息,例如“您已经订阅了该主题”。

如何更改 mongoid 错误消息?我可以搜索并替换确切的字符串,但这对我来说似乎不太优雅。

ruby-on-rails error-handling mongoid
1个回答
0
投票

试试这个。

# config/locales/en.yml

---
en:
  mongoid:
    errors:
      models:
        subscription:
          already_subscribed: You are already subscribed to this topic


# app/models/subscription

class Subscription
  include Mongoid::Document
  include Mongoid::Timestamps

  field :email, type: String
  field :confirmed, type: Mongoid::Boolean, default: false

  belongs_to :topic

  before_validation :validate_uniqueness

  def validate_uniqueness
    return if self.class.where(email: email).none?

    errors.add(:base, :already_subscribed)
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.