2012-04-24 4 views
0

최근에 heroku에 응용 프로그램을 업로드했는데 postgresql로 인해 대소 문자가 구분되지 않아 어떻게 해결할 수 있습니까? 내 코드는 다음과 같이 따른다 :Heroku 대소 문자 민감도

relation = Game.gamsearch(params[:gamsearch]) 
relation = Game.consearch(params[:consearch]) if params[:consearch].present? 
relation = Game.gensearch(params[:gensearch]) if params[:gensearch].present? 
relation = Game.where("game_name LIKE ?", "#{params[:game_name]}%") if params[:game_name].present? 
relation = Game.where("console = ?", params[:console]) if params[:console].present? 

보기 코드 :

def self.gensearch(*args) 
#search for games by their genre 
return [] if args.blank? 
cond_text, cond_values = [], [] 
args.each do |str| 
    next if str.blank? 
    cond_text << "(%s)" % str.split.map{|w| "genre LIKE ? "}.join(" OR ") 
    cond_values.concat(str.split.map{|w| "%#{w}%"}) 
end 
all :conditions => [cond_text.join(" AND "), *cond_values] 

답변

2
relation = Game.where("game_name ILIKE ?", "#{params[:game_name]}%") if params[:game_name].present? 

으로 통지 ILIKE 대신 LIKE :

<%= form_tag games_path, :controller => 'games', :action => 'gamsearch', :method => 'get' do %> 
         <%= text_field_tag :gamsearch, params[:gamsearch] %> 
         <%= submit_tag t('.searchb'), :game_name => nil %> 
         <% end %> 

이 모델 코드입니다

+0

좋습니다. 다른 검색, 특히 목록의 첫 번째 검색에 대해서는 어떻게해야합니까? 아니면 사용자 지식을 넘어서는 것입니까? – user1222136

+0

gamsearch 방법에서는 ILIKE를 사용해야하며 consearch 및 gensearch에서는 동일하게 사용해야합니다. 그 방법을 보지 않고는 내 지식을 넘어선 것입니다 :) –

+0

내 게시물을 업데이트했습니다 :) – user1222136

2

ILIKE를 사용하여 PG를 만들 수 있지만 개발중인 다른 데이터베이스 (sqlite)가 있으면 작동하지 않을 수 있습니다. 이 문제를 해결할 수있는 한 가지 방법은 두 값을 모두 대문자로 만들어 대문자 버전을 비교하는 것입니다.

+0

옙, 유효 지점. 그러나 나는 항상 당신이 배포하고자하는 DB에 대비하여 구축해야한다고 주장 할 것입니다. –

+0

물론! 그러나 어떤 사람들에게는 dev에있는 PG가 조금 과장되었습니다! 아마 몽고로 전환해야하지만, 그건 또 다른 주제입니다 ;-) –