背景
諸事情により、生SQLでDELETE文を発行したかった。プレースホルダも使用したい。
環境
- ruby: 2.4.1
- rails(activerecord): 5.1.4
- mysql2: 0.4.9
本題
ActiveRecordに要件を満たすAPIはなさそうなので、ActiveRecord::ConnectionAdapters::AbstractAdapter#raw_connectionからDBアダプタを直接叩いた。 以下、MySQLの例。
ActiveRecord::Base.connection.raw_connection.prepare("DELETE FROM samples WHERE id = ?").execute(1)
備考
SELECTでプレースホルダ付き生SQLを発行したい場合、ActiveRecord::Base#find_by_sqlが良さそう。