像查询一样安全的ActiveRecord
我试图写LIKE查询。
我读纯stringquires是不安全的,但是我找不到任何解释如何编写安全的LIKE哈希查询的文档。
可能吗? 我应该手动防御SQL注入?
为确保您的查询string得到正确的清理,请使用数组或哈希查询语法来描述您的条件:
Foo.where("bar LIKE ?", "%#{query}%") 要么:
 Foo.where("bar LIKE :query", query: "%#{query}%") 
 如果query可能包含%字符,那么您需要首先使用sanitize_sql_like来清理query : 
 Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%") Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%") 
使用Arel,您可以执行这个安全且便携的查询:
 title = Model.arel_table[:title] Model.where(title.matches("%#{query}%")) 
对于PostgreSQL将是
 Foo.where("bar ILIKE ?", "%#{query}%") 
你可以做
 MyModel.where(["title LIKE ?", "%#{params[:query]}%"])