Posted at

Active Record のプレースホルダー付き条件を知る


前提


  • 生の SQL 文に引数として値を複数渡したいなと思った時に知ったメソッドです。


環境


  • Ruby On Rails 5.1.6

  • Ruby 2.4.4p296


TL;DR

以下のように、 ActiveRecord の where メソッドにおいて、SQL 文にシンボルで値を複数渡すことができます。これは、 where だけじゃなく、 find_by_sql メソッドでも使えることは確認できています。他のメソッドはどうなんだろう…。

Users.where("created_at >= :start and created_at <= :end",

{start: '2018-01-01', end: '2018-03-31'})
# "SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('Users') AND (created_at >= '2018-01-01' and created_at <= '2018-03-31')"

Users.find_by_sql(['select * from users where created_at between :start and :end', { start: '2018-01-01', end: '2018-03-31' }])
# select * from users where created_at between '2018-01-01' and '2018-03-31'


参考文献