Rails范围与数组的位置

时间:2014-03-05 19:12:03

标签: ruby-on-rails ruby-on-rails-4

我有以下范围:

scope :task_based, ->(dept, number){ joins(:task).where('tasks.department = ? and tasks.number = ?', dept, number)}

哪个很好用,除了偶尔我需要说一些where tasks.number is equal to 123 OR 456

的效果

我知道ActiveRecord允许我where(number: [123, 456]),但由于这是JOIN,这似乎不起作用。

那我怎么能在那个范围内传递一个数组呢?它并不总是一个数组,但需要考虑它的时间。

2 个答案:

答案 0 :(得分:1)

以下是您需要做的事情:

scope :task_based, ->(dept, number){ joins(:task).where('tasks.department = ? and tasks.number in (?)', dept, number)}

上述范围适用于两种情况,即数字为整数或整数数组。

答案 1 :(得分:0)

你需要为这个打破一些鸭子打字

                                   # 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