Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 Rails作用域和where的数组_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails作用域和where的数组

Ruby on rails Rails作用域和where的数组,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有以下范围: 范围:基于任务,->(部门,编号){连接(:任务)。其中('tasks.department=?和tasks.number=?',部门,编号)} 这非常有效,除了偶尔我需要说一些关于tasks.number等于123或456的的内容 我知道ActiveRecord允许我做where(数字:[123456]),但由于这是一个加入,这似乎不起作用 那么,如何在该作用域上传递数组呢?它并不总是一个数组,但需要说明它是什么时候的。您需要为这个数组输入一些duck类型

我有以下范围:

范围:基于任务,->(部门,编号){连接(:任务)。其中('tasks.department=?和tasks.number=?',部门,编号)}

这非常有效,除了偶尔我需要说一些关于tasks.number等于123或456的
的内容

我知道ActiveRecord允许我做
where(数字:[123456])
,但由于这是一个
加入
,这似乎不起作用


那么,如何在该作用域上传递数组呢?它并不总是一个数组,但需要说明它是什么时候的。

您需要为这个数组输入一些duck类型

                                   # I like to use do/end for multi-line blocks, but that is purely a stylistic choice
scope :task_based, ->(dept, number) do 

  return joins(:task).where('tasks.department = ? AND tasks.number IN ?', dept, number) if number.is_a? Array

  return joins(:task).where('tasks.department = ? and tasks.number = ?', dept, number) if number.is_a?

end

以下是您需要做的:

scope :task_based, ->(dept, number){ joins(:task).where('tasks.department = ? and tasks.number in (?)', dept, number)}
上述范围适用于两种情况,即数字为整数或整数数组