0
다음 질문에 대한 답변을 how can I use like query in ruby with sinatra? 다음과 같은 문제점이 있습니다. 입력 문자열에서 쿼리를 작성하는 방법은 av (alue)와 ak (EY) (= 필드) 다양한 selctions는 selection.join(' and ')
activerecord를 사용하여 SQL injection 방지
def string_selector(k, v)
case
when v[/\|/]
v.scan(/([^\|]+)(\|)([^\|]+)/).map {|p| "lower(#{k}) LIKE '%#{p.first.downcase}%' or lower(#{k}) LIKE '%#{p.last.downcase}%'"}
when v[/[<>=]/]
v.scan(/(<=?|>=?|=)([^<>=]+)/).map { |part| p part; "#{k} #{part.first} '#{part.last.strip}'"}
else
# "lower(#{k}) LIKE '%#{v.downcase}%'" #(works)
("lower(#{k}) LIKE ?", '%#{v.downcase}%') #doesn't work
end
end
에 의해 결합되어 그 후.에 봐하지만 난 오류 내가 잘못된 일을 할 수있는 무엇
selectors.rb:38: syntax error, unexpected keyword_end, expecting $end
from C:/../1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require'
를 얻으려면?
thnx kardeiz하지만 Arel 테이블에서 일치 항목을 사용하면 " (NoMethodError)"에 대해 "정의되지 않은 메서드가 '일치하는 오류가 발생합니다. 활성 레코드 해시 및 메서드를 사용하여 쿼리를 작성했지만 실패했습니다. , 거기에 여러 조건을 여러 테이블에 내가 일반 SQL을 사용하여 결합해야합니다. 나는 SQL을 사용함으로써 더 이상 책의 글자를 따르는 주사를 막을 수는 없지만 LIKE 주입을 사용하면 주사가 작동하지 않는다는 것을 알아 냈으므로 여분의 보호 장치없이 계속해야 할 것입니다. afreid –
peter
Arel :: Table에'matches'를 호출 할 수 없으므로 Arel 속성에서 호출해야합니다. 예제에서'tbl [k]'는 정의 된'Arel :: Table''tbl'에'k'에 대한'Arel :: Attribute'입니다. –
아아, 미안하지만,이 작은 테스트에서, 나는 그것을 나의 쿼리 디자인에 통합하려고 노력할 것이다. – peter