Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 带有select(“…”)的Rails 3类方法给出了错误数量的参数_Ruby On Rails 3_Select_Class Method - Fatal编程技术网

Ruby on rails 3 带有select(“…”)的Rails 3类方法给出了错误数量的参数

Ruby on rails 3 带有select(“…”)的Rails 3类方法给出了错误数量的参数,ruby-on-rails-3,select,class-method,Ruby On Rails 3,Select,Class Method,我希望像这样使用这个方法 @results = Candidate.all.match_against(options) ,其中“options”是一个整数数组。它应该会把所有候选人的比赛分数都还给我 在候选者模型中,我有一种方法可以将候选者与作为参数给出的选项进行匹配 def self.match_against(cu_options) select("candidates.id, candidates

我希望像这样使用这个方法

@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。

实际上,您正在向选择范围传递两个参数:

  • 字符串“candidates.id,candidates.first_name,candidates.last_name,candidates.number, 求和(当c_回答(?)中的选项_id时,则为1,否则为0结束)作为分数”
  • 变量cu_选项

有什么原因吗?

你说得对。我希望select()中的第二个参数进入第一个字符串中的“?”。我已经在我的控制器中成功地使用了这种代码:“Question.where('questions.id not in(?),my_array)”。这将变成“选择问题。*从问题中(id不在(1,2))中”)。为什么同样的方法在select()中不起作用?好吧,where接受select;)以外的其他参数基本上,我认为在使用select时不需要插入任何内容,因为调用select时应该知道数据库结构,而where可能需要根据行内容生成动态条件。对于那些可能想知道相同问题的人。我通过将“(?)”替换为“(“+cu_options.join(“,”)+”)使查询正常工作。