P学習帳

書いておぼえるブログ

【Ruby on Rails】安全に検索語を指定してレコードを取得したい

状況  

Active RecordsのWhereに動的に文字列を渡してレコードを取得したい。クエリエラーになる文字列が含まれるかもしれないので、エスケープしてから渡さなければならない。   

解決  

inspectする。 エスケープが必要な文字をそれしてくれる。 

コード  

lines.each do |line|
  Table.where(content: line.inspect)
  # do stuff
end

雑感  

シングルクオートは意外といろんなところに含まれている。エスケープ忘れていてクエリのエラーがでるとびっくりするのでちゃんとサニタイズする習慣をつけたい。