2014-03-05 64 views
0

我有以下範圍:Rails的範圍爲在那裏

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

你需要出局的一些鴨子類型爲這一個

        # 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 
1

這裏是你需要做什麼:

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

上述範圍將在這兩種情況下工作,即數量爲整或整數數組。

+0

@Shpigford您的問題是否解決? –