kame's engineer note

技術関連のメモをブログに記録していく

rails4.2でエンコードエラー rails incompatible character encodings: ASCII-8BIT and UTF-8

rails4.2で簡単な検索フォームを作ったのだが、テキストフィールドで検索すると下記のエラーが発生。
rails3系の時はこんな現象おきなかったがなぜだろう、、

rails incompatible character encodings: ASCII-8BIT and UTF-8
= form_for @search_form,:url => root_path,:method => 'get' do  |f|
  .form-group
    = f.text_field :keywords,:class => 'form-control',:placeholder => 'keywords'
  = f.submit 'search' ,:name => 'submit',:class => 'btn btn-default' 
- @contents.each do |c|
    li
        p=c.title

どうやら ASCII-8BITが混ざってしまってるらしい。 c.titleのエンコードを調べてもutf8が帰ってくる。

formからのparameterを調べてみる。

raise @params['keywords'].encoding.inspect
#<Encoding:ASCII-8BIT>

これだ。

ここの部分をUTF8にしてあげる。↓

keywords.force_encoding("UTF-8")
@arr = Content.where('title LIKE ?', "%#{keywords}%")

無事、日本語で検索できるようになった。
無理やり感があるので、他にもっといい方法がないか後ほど調べてみる。

追記

どうやら、あるGemが悪さをしてたっぽいので、消したら動きました。