3

動作している検索機能を作成しましたが、大文字と小文字を区別しないようにしたいと考えています。
これはうまく動いているので状態を変えたくないのですが、どうすれば鈍感にできますか。4 つのパラメーターはすべてオプションであり、この条件に基づいてそれらのいずれかが存在する場合は機能します。

conditions = {}
conditions['first_name'] = params[:first_name] unless params[:first_name].blank?
conditions['last_name'] = params[:last_name] unless params[:last_name].blank?
conditions['specialities.name'] = params[:speciality] unless params[:speciality].blank?
conditions['locations.zipcode'] = params[:zipcode] unless params[:zipcode].blank?

search = Model.using_scope.where(conditions)

大文字と小文字を区別するデータベースとして PostgreSQL を使用しています。

4

1 に答える 1

5

LOWER(sql)とdowncase(ruby)の組み合わせを使用してみてください

  search = Model.using_scope
  search = search.where('LOWER(first_name) = ?', params[:first_name].downcase) unless params[:first_name].blank?
  search = search.where('LOWER(last_name) = ?', params[:last_name].downcase) unless params[:last_name].blank?
  search = search.where('specialities.name = ?', params[:speciality]) unless params[:speciality].blank?
  search = search.where('locations.zipcode = ?', params[:zipcode]) unless params[:zipcode].blank?
于 2013-03-11T14:21:31.570 に答える