2013-11-26 3 views
0

를 사용하여 URL을 검색 할 때 내 urlSearch 모델에 다음 코드를 가지고 :"http : //"및 "www."를 무시하는 방법 내가 액티브

여기
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://" , ""))

을 할 수있는 그리고 당신은 내가이 작업을 수행 할 수있는 직접적인 방법이 표시되지 않는 "www."

1

또 다른 GSUB 필요 했어. 먼저 문자열에서 호스트를 추출한 다음 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 

당신은 (PostgreSQL을 또는 ILIKE) LIKE를 사용해야합니다. 이 경우 정확히 일치하는 것을 찾을 수 있기 때문에 find_by을 사용할 수 없습니다.