2015-05-20 118 views
2

我試圖寫一個寫:Rails的查詢SQL語句

Team.last.players.sum("goals") 

ERB:

SELECT SUM("players"."goals") 
FROM "players" 
WHERE "players"."team_id" = $1 [["team_id", 2]] 

如何改寫,這樣我可以在一個方法使用它:

def sql_search 
    sql = "SELECT SUM \"players\".\"goals\" FROM \"players\" WHERE \"players\".\"team_id\" = $1 [[\"team_id\", #{self.id}" 
    connection.execute(sql); 
end 

保持收到此錯誤:

PG::SyntaxError: ERROR: syntax error at or near "." 
LINE 1: SELECT SUM "players"."goals" FROM "players" WHERE "players".... 

任何想法,將不勝感激

回答

2

你並不需要在SQL語句添加\",只是將其刪除。

def sql_search 
    sql = "SELECT sum(goals) FROM players WHERE team_id = #{self.id};" 
    connection.execute(sql); 
end 
+0

這似乎是正確的,但有一點解釋可以幫助 –

0

是否有某些原因需要硬編碼SQL查詢?由於SQL injection attacks,使用字符串插值將參數插入到SQL查詢通常是不好的做法。相反,它建議使用的ActiveRecord的SQL查詢參數像這樣綁定:

user_input = 5 
Player.where('team_id = ?', user_input).sum(:goals) 

基本上這樣做是插入參數5消毒後。這意味着您可以安全地抵禦黑客試圖將任意SQL插入參數變量的攻擊,試圖返回敏感數據或完全刪除數據!