Url

Witam, mam dwa problemu co do URL.

  1. Mam pewną zmienną, jestem pewien że jest to adres www (a jak nie to mi to wisi - konkretnie jest to jedno z pól w dodawaniu komentarza). Jak mogę sprawdzić, czy zaczyna się od http://, a jeśli nie, to dodać ten fragment na początek adresu?
    Aktualnie mam coś takiego:

class Comment < ActiveRecord::Base
belongs_to :post
validate :url_must_be_right

def url_must_be_right
if www.slice(0,7)!=“http://”
www=“http://”+www
end
end
end

Na dodatek nie wiem dlaczego, pluje mi, że www = nil chociaż w params widzę, że www ma pewną wartość. : |

  1. Sprawdzić czy w stringu jest link, jeśli tak, to zrobić z niego “htmlowy” link, albo przemłynić go przez link_to : P

np tak:

def validate begin uri = URI.parse(url) if uri.class != URI::HTTP errors.add(:url, 'Only HTTP protocol addresses can be used') end rescue URI::InvalidURIError errors.add(:url, 'The format of the url is not valid.') end end
albo tak

/^(http|https)://([a-z0-9]+([-.]{1}[a-z0-9]+).[a-z]{2,5}|(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|localhost)(:[0-9]{1,5})?(/.)?$/ix

do wyświetlenia najlepiej użyć auto_link - ze wszystkiego zrobi link jak tylko się da.

Użyj http://github.com/henrik/validates_url_format_of/ i ewentualnie rozszerz o:

[code=ruby]class Comment < ActiveRecord::Base
before_validate :sanitize_www

def sanitize_www
www = (www =~ %r[^http://]) ? www : “http://” + www
end
end[/code]
Atrybut www może być pusty jeśli nie ma takiej kolumny w tabeli. Na pewno odpaliłeś migracje?

Osobna sprawa: nie jestem pewien czemu ale nadpisywanie validate zaproponowane przez Gotara strasznie mi śmierdzi :frowning:

na szybko w google wklepałem i 2 pierwsze strony (propozycje wkleiłem), bo wiem, że wiele osób woli tu zapytać, niż w google sprawdzić, ale oczywiście jak jest coś gotowego na githubie to jak najbardziej trzeba skorzystać.

www = (www =~ %r[^http://]) ? www : "http://" + www

To jest przypisanie do zmiennej lokalnej www, powinno być self.www = .

[quote=radarek]www = (www =~ %r[^http://]) ? www : "http://" + www
To jest przypisanie do zmiennej lokalnej www, powinno być self.www = .[/quote]
Dzięki wielkie wszystkim! : )