validates_url という gem を使ってみました
名前のとおり URL のバリデーションをしてくれる gem で、custom validator で実装してたのを簡単にしてくれます
install
# add this to your Gemfile
gem "validate_url"
使い方
class User < ActiveRecord::Base
validates :homepage, url: { allow_blank: true }
end
どんなチェックをしてるか見てみた
uri = Addressable::URI.parse(value)
unless uri && uri.host && schemes.include?(uri.scheme) && (!options.fetch(:no_local) || uri.host.include?('.'))
-
UIR.parseできること -
hostがあること -
scheme(http or https)を含むことを含むこと - オプションの
no_local指定がある場合、host に.を含むこと
バリデーションエラーはデフォルトで [属性名] is not valid url となってますが、I18n 対応で変更できます