Метод класса Rails 3 с select ("...") дает неверное количество аргументов - PullRequest
0 голосов
/ 07 августа 2011

Я хочу использовать этот метод, как

@results = Candidate.all.match_against(options)

, где "options" - это массив целых чисел. И это должно вернуть мне всех кандидатов с их счетом матча.

В модели кандидата у меня есть метод сопоставления кандидатов с параметрами, заданными в качестве параметра.

def self.match_against(cu_options)                                           
  select("candidates.id, candidates.first_name, candidates.last_name, candidates.number, 
  sum(case when c_answers.option_id in (?) then 1 else 0 end) as score", cu_options)
  .joins("join answers as c_answers on c_answers.user_id = candidates.user_id")
  .joins("join options on c_answers.option_id = options.id")
  .where("options.ordering >= 0")
  .group("candidates.id, candidates.number, candidates.first_name, candidates.last_name")
end

По какой-то причине, когда я вызываю этот метод, он выдает ошибку

ArgumentError: wrong number of arguments (2 for 1)
from /home/mika/.rvm/gems/ruby-1.9.2-p180@vaalikone/gems/activerecord-3.0.7/lib/active_record/relation/query_methods.rb:34:in `select'
from /home/mika/.rvm/gems/ruby-1.9.2-p180@vaalikone/gems/activerecord-3.0.7/lib/acteve_record/base.rb:442:in `select'
from /home/mika/projects/vaalikone/app/models/candidate.rb:35:in `match_against'
...

Понятия не имею, откуда берется второй аргумент. Я передаю только один аргумент. Я использую postgresql.

1 Ответ

0 голосов
/ 07 августа 2011

На самом деле, вы передаете два аргумента в область выбора:

  • строка "candid.id, candid.first_name, sources.last_name, candid.number, sum (случай, когда c_answers.option_idв (?) затем 1 или 0 в конце) как оценка "
  • переменная cu_options

Есть ли для этого какая-либо причина?

...