kayawari
7/26/2019 - 1:43 PM

sanitize_sql_array

# SQLインジェクションを防止しつつ、生のSQLを書きたいと言う時に便利

ids = [1,2,3]

ActiveRecord::Base.send(
    :sanitize_sql_array,
    ['SELECT * from users WHERE id IN (:ids)', ids: ids]
)
# => "SELECT * from users WHERE id IN (1,2,3)"


# Rails5.1以前であれば、protectedメソッドのままのそうなので、send経由で利用することが可能。Rails.5.2からはprotectedから解除されているので以下のようにかける

sanitize_sql_array(['SELECT * from users WHERE id IN (:ids)', ids: ids])
# => "SELECT * from users WHERE id IN (1,2,3)"