Validar URLs no Rails

Pegue este código:

class UrlValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record
.errors[attribute] << (options[:message] || "must be a valid URL") unless url_valid?(value)
end

# a URL may be technically well-formed but may
# not actually be valid, so this checks for both.
def url_valid?(url)
url
= URI.parse(url) rescue false
url
.kind_of?(URI::HTTP) || url.kind_of?(URI::HTTPS)
end
end

Salve-o no diretório do aplicativo para que seja carregado automaticamente, por exemplo:

app/validators/url_validator.rb

E use-o em seu modelo assim:

class Something < ActiveRecord::Base
validates
:link, url: true
end

Os meus agradecimentos a StackOverflow por me apontar na direção certa.

Fonte + testes