0

この方法を次のように使用したい

@results = Candidate.all.match_against(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'
...

2番目の引数がどこから来ているのかわかりません。引数を 1 つだけ渡します。私はpostgresqlを使用しています。

4

1 に答える 1

0

実際には、select スコープに 2 つの引数を渡しています。

  • 文字列「candidates.id、candidates.first_name、candidates.last_name、candidates.number、sum(c_answers.option_id の場合は (?)、1 の場合は 0 の終わり) をスコアとして」
  • 変数 cu_options

その理由はありますか?

于 2011-08-07T14:20:25.637 に答える