2015-09-07 16 views
9

Obecnie podczas dodawania adresów URL za pośrednictwem formularza na mojej aplikacji Rails mamy następujące before_save i validation sprawdza:Dodawanie www do URL witryny podczas walidacji

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 

jednak oznacza to, że jeśli wpisać w pola formularza

testing.com 

mówi mi, że adres URL jest nieprawidłowy i będę musiał umieścić w

www.testing.com 

, aby zaakceptować adres URL:

Chciałbym, aby zaakceptował adres URL niezależnie od tego, czy użytkownik wejdzie na stronę www czy http.

Czy powinienem dodać coś jeszcze do smart_add_url_protocol, aby upewnić się, że zostało dodane, czy też jest to problem z walidacją?

Dzięki

Odpowiedz

9

Jest to standardowy URI klasa, która może być używana do sprawdzania url S. W twoim przypadku potrzebujesz metody URI::regexp. Używając go, twoja klasa może być przepisana w ten sposób:

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

Dzięki - zmieniłem kod zgodnie z twoją radą, ale wciąż mi mówi, że strona jest nieważna bez strony www. Czy muszę również coś zmienić w tym wierszu? validates_format_of: website,: with =>/^ ((http | https): \/\ /)? [a-z0-9] + ([-.] {1} [a-z0-9] +). [ az] {2,5} (: [0-9] {1,5})? (\ /.)? $/ix,: multiline => true – tessad

+0

Usuń tę walidację. Nie potrzebujesz tego z powyższym kodem. – dimakura

Powiązane problemy