x, y 두 개의 필드가있는 검색 양식이 있습니다.레일 일부 매개 변수가 비어있을 때 찾기
검색을 수행하면 모든 조건과 일치하는 레코드가 검색됩니다. 그러나 두 조건 중 하나라도 공백으로두면 '모두'로 설정할 수 있습니다.
params [: x] 및 params [: y]를 모두로 설정해야하는 경우 어떻게해야합니까?
params[:x] = ? unless params[:x]
params[:y] = ? unless params[:y]
users = User.where(["x = ? AND y = ?", params[:x], params[:y]])
이 메서드는 [ "x =? AND y =?", x, y] 메서드와 같은 악의적 인 의도를 방지합니까? – bmck
예, SQL 인젝션으로부터 보호하지 않는 유일한 방법은 문자열을 조건에 직접 넣는 것입니다. 이 문장은 다음과 같습니다. "X = # {params [: x]}"는 SQL 삽입에 개방적입니다. [ "X =?", params [: x]] 및 {: x => params [: x]} 문은 SQL 삽입을 허용하지 않습니다. –
* 모두 배열 해시 방법은 sanitize_sql 함수를 호출 : 가 http://apidock.com/rails/ActiveRecord/Base/sanitize_sql/class –