2013-11-26 10 views
0

У меня есть следующий код в моем urlSearch модели:Как игнорировать "http: //" и "www." когда я искать в URL с помощью ActiveRecord

def find_url(orig_url) 
    url = find_by(url: orig_url) 
    unless url 
     # some stuff 
    end 
end 

Здесь find_by будет искать для точной строки, переданной ей, которая: orig_url аргумент в моем случае.

Например, если в моей таблице у меня есть URL, как: www.stackoverflow.com и если я искать http://stackoverflow.com или http://www.stackoverflow.com, это не та же самая строка, которая означает, что find_by возвратит ноль.

Есть ли способ сообщить find_by игнорировать http:// и www. при поиске?

+0

Игнорировать вход или сохраненные данные? – Babblo

+0

сохраненные данные, если, например, в моей базе данных у меня есть www.foobar.com, и мой поиск «http://foobar.com», он вернет результат – medBo

ответ

1

Вы могли бы сделать url = find_by(url: orig_url.gsub("http://" , ""))

И вам потребуется еще GSUB для "www."

1

Я не вижу прямой способ сделать это. Во-первых, вам нужно извлечь хост из строки, а затем удалить www, если он существует.

>> string = 'http://www.foobar.com' 
>> host = URI.parse(string).host # www.foobar.com 
>> host.gsub!(/^www\./, '') #foobar.com 
>> MyModel.where('url LIKE ?', "%#{host}%").first 

вы должны использовать LIKE (или ILIKE для PostgreSQL), если вы не контролируете значения, хранящиеся в базе данных. вы не можете использовать find_by в этом случае, так как всегда найдете точное совпадение.