2015-09-07 130 views
9

Attualmente quando si aggiunge un URL attraverso un modulo sul mio Rails app abbiamo le seguenti before_save e validation controlli:Aggiungendo www agli URL del sito web durante la convalida

def smart_add_url_protocol 
    if self.website? 
    unless self.website[/\Ahttp:\/\//] || self.website[/\Ahttps:\/\//] 
     self.website = "http://#{self.website}" 
    end 
    end 
end 

validates_format_of :website, :with => /^((http|https):\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+).[a-z]{2,5}(:[0-9]{1,5})?(\/.)?$/ix, :multiline => true 

Tuttavia, ciò significa che se digito nella campo modulo

testing.com 

mi dice che l'URL non è valido e avrei dovuto mettere in

www.testing.com 

per accettare l'url

Mi piacerebbe che accetti l'url indipendentemente dal fatto che un utente inserisca www o http.

Devo aggiungere qualcos'altro a smart_add_url_protocol per assicurarmi che venga aggiunto, o si tratta di un problema con la convalida?

Grazie

risposta

9

C'è un URI classe standard che può essere utilizzato per il controllo di url s. Nel tuo caso hai bisogno del metodo URI::regexp. Con esso la classe può essere riscritta così:

before_validation :smart_url_correction 
validate :website, :website_validation 

def smart_url_correction 
    if self.website.present? 
    self.website = self.website.strip.downcase 
    self.website = "http://#{self.website}" unless self.website =~ /^(http|https)/ 
    end 
end 

def website_validation 
    if self.website.present? 
    unless self.website =~ URI.regexp(['http','https']) 
     self.errors.add(:website, 'illegal format') 
    end 
    end 
end 
+0

Grazie - hanno cambiato il codice secondo il vostro parere, ma è ancora a dirmi che il sito non è valida senza la parte www. Devo cambiare qualcosa anche in questa linea? validates_format_of: sito web,: con =>/^ ((http | https): \/\ /)? [a-z0-9] + ([-.] {1} [a-z0-9] +). [ az] {2,5} (: [0-9] {1,5})? (\ /.)? $/ix,: multiline => true – tessad

+0

Rimuovi questa convalida. Non ne hai bisogno con il codice sopra. – dimakura

Problemi correlati