J'ai un formulaire de recherche avec deux champs: x, yRails Trouver lorsque certains params seront vides
Lorsque la recherche est effectuée, il recherchera les enregistrements correspondant à toutes les conditions. Toutefois, l'une des deux conditions peut être définie sur "Tous" en laissant cette case vide.
Que dois-je régler params [: x] et params [: y] s'ils sont tous réglés.
params[:x] = ? unless params[:x]
params[:y] = ? unless params[:y]
users = User.where(["x = ? AND y = ?", params[:x], params[:y]])
Cette méthode empêche-t-elle les intentions malveillantes comme la méthode ["x =? AND y =?", X, y]? – bmck
Oui, la seule façon de ne pas protéger contre l'injection SQL est de mettre les chaînes directement dans les conditions. Cette instruction: "X = # {params [: x]}" est ouverte à l'injection SQL. Les instructions ["X =?", Params [: x]] et {: x => params [: x]} n'autorisent pas l'injection SQL. –
* à la fois le tableau et les approches de hachage appeler la fonction de sanitize_sql: http://apidock.com/rails/ActiveRecord/Base/sanitize_sql/class –