Railsで生のSQLにテーブル名やカラム名を動的に埋め込みたい場合はquoteメソッドを使おう

Railsでアプリケーション開発をしていると、深淵なる理由で生のSQLにテーブル名やカラム名を動的に埋め込みたいケースが出てくる。

その場合安全だと分かっていてもサニタイズしないでSQLに文字列を埋め込むのは気が引ける。

そういう場合は、 ActiveRecord::Base.connection.quote_table_name('table_name')ActiveRecord::Base.connection.quote_column_name('column_name') が使える。

他にもメソッドがあり、 http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Quoting.html をみるとよい。

#quote_table_name#quote_column_nameをかますとクォートで囲ってくれる。

もし文字列のなかにクォートがあれば以下のようにエスケープしてくれる。

pry(main)> ActiveRecord::Base.connection.quote_table_name('users')
=> "`users`"
pry(main)> ActiveRecord::Base.connection.quote_table_name('users`')
=> "`users```"