Rails 3 и проверка, если http включен в ссылку - PullRequest
0 голосов
/ 23 ноября 2010

Когда пользователь отправляет ссылку, есть ли способ проверить, включил ли он http: // или нет. Другими словами, возможно ли не только проверить, но и добавить http: //, если он отсутствует?

Я использую Rails 3.

Ответы [ 3 ]

3 голосов
/ 23 ноября 2010

Вы можете переопределить метод установки для ссылки.В вашей модели что-то вроде этого:

def link=(str)
  str = 'http://' + str if str[0,7] != 'http://'
  super(str)
end

Это приведет к добавлению http: // в начало всех ссылок, если их там еще нет.

2 голосов
/ 23 ноября 2010

Вы можете использовать пользовательскую проверку.

Притворяясь, что ваша модель "Post" и атрибут "url", вы можете использовать что-то вроде:

class Post < ActiveRecord::Base
  validate :ensure_valid_url

  protected

  def ensure_valid_url
    protocol_regexp =  %r{
      \A
      (https?://)
      .*
      \Z
    }iux

    self.url = "http://" + url unless url.blank? or url.match(protocol_regexp)

    ipv4_part = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/  # 0-255
    regexp = %r{
      \A
      https?://
      ([^\s:@]+:[^\s:@]*@)?
      ( (xn--)?[[:alnum:]\w_]+([-.][[:alnum:]\w_]+)*\.[a-z]{2,6}\.? |
          #{ipv4_part}(\.#{ipv4_part}){3} )
      (:\d{1,5})?
      ([/?]\S*)?
      \Z
    }iux

    default_message     = 'does not appear to be a valid URL'
    default_message_url = 'does not appear to be valid'
    options = { :allow_nil => false,
                :allow_blank => false,
                :with => regexp }

    message =  url.to_s.match(/(_|\b)URL(_|\b)/i) ? default_message_url : default_message
    validates_format_of(:url, { :message => message }.merge(options))
  end

end

Этот пример основан validates_url_format_of

0 голосов
/ 16 января 2014

вариант ответа Стива Лорека с учетом того, что некоторые предоставленные пользователем ссылки будут содержать https: // вместо http://

def link=(str)
  str = 'http://' + str if (str[0,7] != 'http://' && str[0,8] != 'https://')
  super(str)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...