2012-05-14 67 views
1

我有一個字符串存儲在session[:login],我想用在SQL查詢中,所以我寫了這個。把一個變量放在一個字符串中,它不工作?

@users = User.find(:all, :conditions => ['user = "#{session[:login]}"']) 

爲什麼不能正常工作?謝謝!

+1

Ruby的單引號字符串不會內插,雙引號字符串可以; SQL使用單引號作爲字符串文字,雙引號(通常)用於引用標識符。 –

+0

嗯,有趣的是,謝謝你的信息 –

回答

6

你可以重建你的查詢是這樣的:

@users = User.find(:all, :conditions => ['user = ?', session[:login]]) 

但這個看起來更好:

@users = User.where(user: session[:login]) 
+0

這裏很重要的一點是,你應該總是**總是**使用提供的SQL轉義方法,並且從來沒有像原始問題那樣自己做。 +1爲正確的方式。 – tadman

+0

注意,'User.where(...)。all'等同於'User.find(:all,...)',但是大部分相似,沒有'.all'。 – tadman

4

這只是沒有任何變量替換字符串:'user = "#{session[:login]}"'

用繩子可變內插看起來像這樣:"user = '#{session[:login]}'"

0

您可以試試這個

@users = User.find(:all, :conditions => ["user = '#{session[:login]}' "]) 

使用雙引號外部和內部單引號。

+0

Hck已經在10分鐘前給出了答案。 – Mischa

相關問題