How to prefix http to multiple columns' url input from users in Rails? -
this question has answered question single column how do multiple columns? i've got 3 columns (website, fb, twitter) want prefix http in case users don't input them in form.
i tried doesn't work:
before_save :sanitize_links private def sanitize_links website = self.website facebook = self.facebook twitter = self.twitter links = [website, facebook, twitter] links.each |link| unless link.include?("http://") || link.include?("https://") link = "http://" + link end end end update
i've tried suggestion kl-7 unfortunately hit little snag. how use output of array before_save? i've tried code below doesn't work.
before_save :sanitize_links private def sanitize_links links = ["website", "facebook", "twitter"] links.map! { |link| self.link =~ %r{\ahttps?://} ? self.link : "http://" + self.link } end update 2
i gave up. i'll repeat 3 times:
before_save :sanitize_links private def sanitize_links # prefix user-submitted links http:// if missing self.website =~ %r{\ahttps?://} ? self.website : self.website = "http://" + self.website self.facebook =~ %r{\ahttps?://} ? self.facebook : self.facebook = "http://" + self.facebook self.twitter =~ %r{\ahttps?://} ? self.twitter : self.twitter = "http://" + self.twitter end
the problem
link = "http://" + link in code assigns new value link variable withing block, doesn't change corresponding element of list.
to alter elements of list in-place can use array#map!:
links.map! |link| link.include?("http://") || link.include?("https://") ? link : "http://" + link end another thing i'm bit worried include? return true if given substring (e.g., 'http://' occurs somewhere in middle of string , not @ beginning. i'd rather use regexp task:
links.map! { |link| link =~ %r{\ahttps?://} ? link : "http://" + link } update
if link attribute of model, should @ least store attribute , not local links variable:
self.links = links.map { |link| link =~ %r{\ahttps?://} ? link : "http://" + link }
Comments
Post a Comment