2010-01-18 3 views
1

파인더에 전달할 조건이 있습니다. 문제는 내가 usafety 방식으로 전달하고 싶지 않다는 것입니다. 내가 좋아하는 내 파인더에 전달하고 싶은활성 레코드는 문자열로 조건을 찾으십시오.

hash = {:start_date=>'2009-11-01',:end_date=>'2010-01-23'} 

:

Model.find(:all,:conditions=>"created > '#{start_date}' and created < '#{end_date}'") 

문제는 그것이 안전하고 난 SQL 주입 문제에 노출하고있어 것입니다 그래서 내가 해시를받을 것을 상상한다. 제 질문은, 어떻게이 상태를 구성하는 가장 좋은 방법이 될까요?

나는 그것을 동적으로하고 싶다. 당신은 이런 식으로 쓸 수

find_condition = ['created > ? and created < ?','2009-10-01','2010-01-01'] 
Model.find(:all,:conditions=>find_condition) 

답변

4

:

Model.find(:all,:conditions=>["created > :start_date and created < :end_date", {:start_date => params[:one], :end_date => params[:two]}]) 

제대로 이스케이프 것 같은 예를 들어, 내가 오늘하고 있어요.

1

액티브 레코드는 물음표를 사용하는 조건 탈출 지원

Model.all(:conditions => ['created > ? and created < ?', 
      :start_date, :end_date]) 

관심을 가질 레일 '가이드 일부 추가 정보 :

+0

@ JohnTopley 나는 이것이 실제로' Model.all (: conditions => [ 'created>? jerhinesmith

+0

@jerhinesmith 고마워요, 잘 잡으세요! 예제를 업데이트하겠습니다. –

+0

나는 start_date, end_date 대신 다음을 의미한다고 생각한다. start_date, : end_date (콜론 아웃) – kikito

관련 문제