2014-04-27 27 views
0

我正在使用rails 2.3.5(此時無法升級)。 我試圖做一個find基於幾個參數的存在。 這裏是我的代碼:Ruby on Rails查找參數array

qstr = "customer_name_id = ?" 
qparams = [customer_engagement.customer_id] 
unless customer_engagement.games_opened_since.nil? 
    qstr << " and created_at >= ?" 
    qparams << customer_engagement.games_opened_since 
end 
Issue.find(:all, :conditions => [qstr, qparams]).each_with_index do |issue,index| 

當我運行這段代碼我得到這個錯誤:

wrong number of bind variables (1 for 2) in: customer_name_id = ? and created_at >= ? 

有人可以幫助我?

+1

你能打印什麼是'qparams'的值,確保它有2個值。 – Saurabh

回答

0

我相信你傳遞給:conditions如果customer_engagement.games_opened_since數組是不爲零的是:

["customer_name_id = ? and created_at >= ?", [customer_engagement.customer_id, customer_engagement.games_opened_since]] 

你不想qparams是你傳遞到:conditions陣列內的數組。您希望您的陣列來結束這樣看:

["customer_name_id = ? and created_at >= ?", customer_engagement.customer_id, customer_engagement.games_opened_since] 

改變你的代碼這應該做的伎倆:

qconditions = ["customer_name_id = ?", customer_engagement.customer_id] 
unless customer_engagement.games_opened_since.nil? 
    qconditions[0] << " and created_at >= ?" 
    qconditions << customer_engagement.games_opened_since 
end 
Issue.find(:all, :conditions => qconditions).each_with_index do |issue,index| 
0

IIRC,你可以使用匿名範圍:

issues = Issue.scoped({}) 
issues = issues.condition "customer_name_id = ?", customer_engagement.customer_id 
issues = issues.condition "created_at >= ?", customer_engagement.games_opened_since if customer_engagement.games_opened_since 
issues.each_with_index do |issue, index| 
    # ... 
end