Active Record查找条件为字符串

时间:2010-01-18 11:38:51

标签: ruby-on-rails activerecord

我有条件传递给发现者。问题是我不想以一种安全的方式传递。所以想象一下,我收到一个哈希:

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)

2 个答案:

答案 0 :(得分:4)

你可以这样写:

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

它将被正确转义。

答案 1 :(得分:1)

Active Record支持使用问号转义条件:

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

您可能感兴趣的Rails指南中的更多信息: