2013-03-12 17 views
-1

当我试图做到这一点:Rails的占位建设阵列

query << ["AND f.name LIKE '%:last_name%' ", :last_name => params[:last_name] ] 

但得到一个错误。当然,语法是不正确的。 有谁知道该怎么做?

+0

你在使用rails 3吗? – jvnill 2013-03-12 13:21:37

+0

“出错”?什么错误? – Dogbert 2013-03-12 13:22:11

+0

@jvnill - 不,我不 – 2013-03-12 13:22:19

回答

1

这是一个数组还是散列?第一个项目看起来像一个数组,第二个像一个哈希。没有一些背景,很难说。你可以尝试,也许这个启动:既然你不使用轨道3

["AND f.name LIKE '%:last_name%' ", {:last_name => params[:last_name]} ] 
+0

这给了我:AND f.name LIKE'%:last_name%'last_name'some_last_name – 2013-03-12 13:25:50

+1

所以提供更多的细节什么是查询?你为什么要追加这个数组呢? – davidrac 2013-03-12 13:26:45

+0

查询是:query = [] 。然后我添加字符串到最后我使用JOIN。我想用占位符来避免SQL注入。 – 2013-03-12 13:55:05

0

,你应该使用scoped到链查询

records = Record.scoped(:conditions => { :active => true }) 
records = records.scoped(:conditions => ["records.name LIKE '%:last_name%' ", { :last_name => params[:last_name] }]) 

,所以你不必建立这样的查询。

+0

但我想逐个构建查询,因为它是一个长的,并且JOIN所有 – 2013-03-12 13:54:11

1

如果查询是一个数组,你可能想传递一个字符串,所以你不数组的数组结束了,你可以这样做:

的Rails 3根

query << "AND f.name LIKE '%#{params[:last_name]}%' " 

梁2

last_name = ActionController::Base.helpers.sanitize(params[:last_name]) 
query << "AND f.name LIKE '%#{last_name}%' " 
+0

这是我开始的,但它允许SQL注入 – 2013-03-12 14:22:29

+0

如果你使用的是rails 3,它会默认清理用户输入,如果不是,你可以通过params通过ActionController :: Base.helpers.sanitize(params [:last_name]) – rant 2013-03-12 14:36:19

+0

我仍然得到相同的结果... – 2013-03-12 14:44:20