Ruby & Rails

UrlValidator

2020-09-18  本文已影响0人  云莉6

验证是否是合法的 url,自己网上找了一些例子,后来发现我们正在使用的 gem doorkeeper 源码中就有可以参考的部分。以此也让我想到,之后可以参考一些优秀源码怎么写,也省的自己重造轮子或者能写的更加规范

https://doorkeeper.gitbook.io/guides/

参考 doorkeeper 源码 app/validators/redirect_uri_validator.rb
最终实现:

# 在 model 中调用
validates :redirect_uri, url: true

# 自定义 validator
class UrlValidator < ActiveModel::EachValidator
  def self.compliant?(value)
    uri = URI.parse(value) && uri.host
  rescue URI::InvalidURIError
    false
  end

  def validate_each(record, attribute, value)
    if value.blank? || !self.class.compliant?(value)
       record.errors.add(attribute, (options[:message] || I18n.t("errors.messages.is_not_a_url")))
    end
  end
end
上一篇 下一篇

猜你喜欢

热点阅读