2013-03-12 47 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