2014-04-27 48 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