簡體   English   中英

Rails 3:驗證中的自定義錯誤消息

[英]Rails 3: Custom error message in validation

我不明白為什么以下不適用於Rails 3.我得到“未定義的局部變量或方法`custom_message'”錯誤。

validates :to_email, :email_format => { :message => custom_message }

def custom_message
  self.to_name + "'s email is not valid"
end

我也嘗試使用:message =>:custom_message,而不是像rails-validation-message-error帖子中建議的那樣沒有運氣。

:email_format是位於lib文件夾中的自定義驗證器:

class EmailFormatValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
      object.errors[attribute] << (options[:message] || 'is not valid')
    end
  end
end

如果有人有興趣,我想出了以下解決方案來解決我的問題:

模型:

validates :to_email, :email_format => { :name_attr => :to_name, :message => "'s email is not valid" }

LIB / email_format_validator.rb:

class EmailFormatValidator < ActiveModel::EachValidator

  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

      error_message = if options[:message] && options[:name_attr]
        object.send(options[:name_attr]).capitalize + options[:message]
      elsif options[:message]
        options[:message]
      else
        'is not valid'
      end

      object.errors[attribute] << error_message
    end
  end
end

僅供參考,這是我認為正在發生的事情。 'validates'方法是一個類方法,即MyModel.validates()。 當你將這些參數傳遞給'validates'而你調用'custom_message'時,你實際上是在調用MyModel.custom_message。 所以你需要類似的東西

def self.custom_message
  " is not a valid email address."
end

validates :to_email, :email_format => { :message => custom_message }

在調用驗證之前定義self.custom_message。

也許需要在驗證之上定義“custom_message”方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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