验证是否是合法的 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
网友评论