# Via: http://almosteffortless.com/2009/02/09/quick-and-dirty-url-validation/ class Link < ActiveRecord::Base attr_accessible :url validate :validate_url private def validate_url errors.add(:url) unless %w(200 301 302).include?(Link.status_code(self.url)) end def self.status_code(url) regexp = url.match(/https?:\/\/([^\/]+)(.*)/) path = regexp[2].blank? ? '/' : regexp[2] Net::HTTP.start(regexp[1]) {|http| http.head(path).code} rescue nil end end