ハッシュタグ検索で入力される文字をいい感じに置換させるメソッド集


はじめに

やりたいこと

  • ハッシュタグ検索で入力された全角ハッシュを半角に変換したい
  • 全角数字を半角にしたい
  • そもそもハッシュを取り除いて検索させたい

やる理由

  • ユーザーがどんな入力の仕方をしてもいい感じに置き換えて出力したい

メソッド

  • trメソッド
  • deleteメソッド

trメソッド

第一引数を第二引数に変換するメソッド

sample.rb
str = '一郎'
puts str.tr('一', '二')

# 結果 => 二郎

これをモデルに定義したsearchアクションに追記

デフォルトのsearchアクション

models/hashtag.rb
def self.search(search)
  if search != ""
    Hashtag.where('name LIKE(?)', "%#{search}%")
  else
    Hashtag.all
  end
end

trメソッドを追記したsearchアクション

models/hashtag.rb
def self.search(search)
  if search != ""
    Hashtag.where('name LIKE(?)', "%#{search.tr('#', '#').tr('/0-9/', '/0-9/')}%")
  else
    Hashtag.all   
  end
end

全角で入力された#と数字を半角に置換しました。

deleteメソッド

ハッシュを取り除いた形で検索させる場合

models/hashtag.rb
def self.search(search)
  if search != ""
    Hashtag.where('name LIKE(?)', "%#{search.tr('#', '#').tr('/0-9/', '/0-9/').delete('#')}%")
    Hashtag.all   
  end
end

おわりに

ハッシュタグに半角数字、全角数字がごちゃまぜになるのが嫌だったので、ハッシュタグ入力時に全角数字のバリデーションを組みました。(本当は置換して保存したかったけどやり方わからず断念)

とりあえずこのやり方なら、検索ユーザーがどんなキーワードで入力してもいい感じに拾ってくれるのでよかったかなと思います。

✔︎