Ruby on Rails найти массив параметров

Я использую рельсы 2.3.5 (на данный момент не могу обновить). Я пытаюсь сделать find на основе наличия нескольких параметров. Вот мой код:

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 >= ?

Может кто-то помочь мне с этим?


person user3577671    schedule 27.04.2014    source источник
comment
Можете ли вы напечатать, каковы значения qparams, убедитесь, что у него есть 2 значения.   -  person Saurabh    schedule 27.04.2014


Ответы (2)


Я считаю, что массив, который вы передаете :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|
person Joe Kennedy    schedule 27.04.2014

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
person Stefan    schedule 27.04.2014