Rails에서 SQL 사용시 LIKE 문을 사용할 때 문자열을 안전하게 escape 처리하기 위해 사용하는 메서드이다.
sanitize_sql_like(string, escape_character = "\\")
첫 번째는 LIKE에서 사용할 스트링이 들어가고, 두번째 파라미터는 escape 문자가 들어간다.
API 에서 사용되는 예시로는 아래와 같다.
sanitize_sql_like("100%")
# => "100\\%"
sanitize_sql_like("snake_cased_string")
# => "snake\\_cased\\_string"
sanitize_sql_like("100%", "!")
# => "100!%"
sanitize_sql_like("snake_cased_string", "!")
# => "snake!_cased!_string"
Ruby on Rails 에서 기본적으로 LIKE 문을 사용할 때는 ORM에 해시를 보내지 않고 질의 String을 보내는데 이 때 Escape 하도록 사용하면 된다.
User.where('name LIKE ?', params[:name])
과 같이 사용하는 하는 것을 User.where('name LIKE ?', sanitize_sql_like(params[:name]))
과 같이 사용할 수 있다.
Rails의 전역에서 사용할 수 있는 메서드는 아니라서 모델이 아닌 곳에서 사용할 경우 ActiveRecord::Sanitization::ClassMethods
를 상속받아 사용하거나 ActiveRecord::Base
의 메서드로 사용 할 수 있다.
class User::SearchService
extend ActiveRecord::Sanitization::ClassMethods
def run(keyword)
User.where('name LIKE ?', "%#{sanitize_sql_like(keyword)%")
end
end
ActiveRecord::Base
메서드로 사용하는 경우class User::SearchService
def run(keyword)
User.where('name LIKE ?', "%#{ActiveRecord::Base.sanitize_sql_like(keyword)%")
end
end