Ruby on Rails 4 例外:如果字段为空,如何绕过



我有一个Subscription模型的表单,用户可以选择输入电话号码。正在使用 Twilio API。

class Subscription < ActiveRecord::Base
    validates_numericality_of :phone_number, allow_blank: true
    validate :mobile_phone_number
    def mobile_phone_number
        lookup_client = Twilio::REST::LookupsClient.new Rails.application.secrets.twilio_sid, Rails.application.secrets.twilio_token
        begin
            response = lookup_client.phone_numbers.get("#{self.phone_number}")
            response.phone_number #if invalid, throws an exception. If valid, no problems.
            return true
        rescue => e
            errors.add(:base, "That phone number is not valid.")
        end
    end

发生的情况:我只能输入给定 Twilio 查找 API 的有效电话号码...这是一件好事。但是,用户需要能够输入空白电话号码。

目前,validates_numericality_of方法被mobile_phone_number方法覆盖。

如果我输入空白phone_number,则会返回"该电话号码无效"。这不应该发生。

如何为rescue制作特殊案例?例如,"除非电话号码为空,否则请拯救此内容"。或者我在这里做错了什么?

感谢所有输入。

这样

你甚至不会输入你的验证函数。查看条件验证

validate :mobile_phone_number, unless: proc { phone_number.blank? }

对于那些不喜欢的人,除非

validate :mobile_phone_number, if: proc { phone_number.present? }

在开头:

if self.phone_number.blank?
   return true
end

最新更新