Safe ActiveRecord come query

Sto cercando di scrivere query LIKE.

Ho letto che le stringhe di stringhe pure non sono sicure, tuttavia non sono riuscito a trovare alcuna documentazione che spieghi come scrivere in modo sicuro LIKE Hash Query.

È ansible? Devo difendere manualmente contro SQL Injection?

Per garantire che la stringa di query venga correttamente disinfettata, utilizzare la matrice o la syntax della query hash per descrivere le condizioni:

Foo.where("bar LIKE ?", "%#{query}%") 

o:

 Foo.where("bar LIKE :query", query: "%#{query}%") 

Se è ansible che la query includa il carattere % , è necessario disinfettare la query con sanitize_sql_like prima:

 Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%") Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%") 

Usando Arel puoi eseguire questa query sicura e portatile:

 title = Model.arel_table[:title] Model.where(title.matches("%#{query}%")) 

Per PostgreSQL lo sarà

 Foo.where("bar ILIKE ?", "%#{query}%") 

Tu puoi fare

 MyModel.where(["title LIKE ?", "%#{params[:query]}%"])