2010-01-18 64 views
1

我有一些條件傳遞給查找器。問題是我不想通過美國安全方式。所以,想象一下,我收到一個哈希:活躍記錄查找條件作爲字符串

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

的Active Record支持使用問號條件逃逸:

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

在Rails的指南一些進一步的信息,你可能感興趣的:

+0

@JohnTopley我認爲這實際上應該是' Model.all(:conditions => ['created>?並創建<?',:start_date,:end_date])'。 (也就是說條件不屬於'[]'?) – jerhinesmith 2010-01-18 14:32:52

+0

@jerhinesmith謝謝,很好!我會更新這個例子。 – 2010-01-18 14:48:08

+0

我相信你的意思是start_date,end_date而不是:start_date,:end_date(冒號) – kikito 2010-01-18 14:48:53