validation失败时设计自定义消息

我在我的应用程序中使用devise作为身份validation引擎。 当设计validation失败时,有没有办法使用自定义消息。 当密码为空时,Devise为我提供以下消息: Password can't be blank ,但我需要另一条消息。 我该怎么做?

如果你想更改设计的validation消息,ActiveRecord en.yml是我建议的答案

以下是en.yml的外观

 en: activerecord: errors: models: user: attributes: email: blank: "Please Specify an Email id" taken: "Please use a different Email id" invalid: "Please Specify a valid Email id" password: blank: "Please Specify a Password" confirmation: "Password does not match" password_confirmation: blank: "Please Specify a Password Confirmation" first_name: blank: "Please Specify First Name" last_name: blank: "Please Specify Last Name" pdf: attributes: name: blank: "Please Specify name to PDF" taken: "Please use different name for PDF" attachment: blank: "Please Upload a PDF Attachment" data_element: attributes: name: blank: "Please give Element a desired name" taken: "Already Created Element with given name" color: blank: "Please assign a color to Element" template: attributes: name: blank: "Please Specify a Name" taken: "Please use a different name" 

我建议你定义这种方式,而不是自定义设计validation模块

因为如果您遵循上述方法,您可能会跳过一两个validation

例如,删除上面的设计validation模块,然后在用户模型中替换自己的设备

那么所有validation都可以,但是你会错过更改密码中的validation

即使密码从未提供也从未给出,因此导致您登录

保持循环也是如此

欢呼

问候

请参阅以下url。

http://railscasts.com/episodes/210-customizing-devise?view=asciicast

如果用户正在登录,则可以在config/locales下的devise.en.yml编辑所有错误消息。

如果您正在注册,Devise会提供自己的validation,无需任何自定义。 如果要自定义它,可以编辑User模型。

查找设备devise :validatable并删除:validatable选项。 之后,您应该能够使用通常的railsvalidation。 请注意,这将导致您必须自己进行所有validation。

validates_presence_of :password, :message=>"Your custom error message!"

一些通常的validation:

  validates_confirmation_of :password validates_presence_of :password, :on => :create validates_presence_of :email validates_uniqueness_of :email 

这不是一个完整的答案,但这听起来应该可以用I18n解决,无论是使用设计内部密钥,还是覆盖用户模型的活动记录validation错误消息。

这是一个类似的问题: 设计i18n的属性?

您可以从config / locales / devise.en.yml自定义设计消息,但是如果要更改为validation消息,请删除:来自Model的validatable。 然后,您可以像以前一样更改validation消息。 例如:

 validates_uniqueness_of :email, :case_sensitive => false, :allow_blank => true, :if => :email_changed? validates_format_of :email, :with => Devise.email_regexp, :allow_blank => true, :if => :email_changed? validates_presence_of :password, :on=>:create validates_confirmation_of :password, :on=>:create validates_length_of :password, :within => Devise.password_length, :allow_blank => true