我有以下范围:
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
,这似乎不起作用。
那我怎么能在那个范围内传递一个数组呢?它并不总是一个数组,但需要考虑它的时间。
答案 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