Области ActiveRecord могут применяться условно, например так:
scope :blue, -> { where(color: 'blue') if condition }
Где condition
- это то, что вы определяете, что возвращает истину или ложь.Если условие возвращает true, область применения применяется.Если условие ложно, область игнорируется.
Вы также можете передавать значения в область:
scope :blue, ->(condition) { where(color: 'blue') if condition }
Итак, вы можете сделать что-то вроде этого:
Task.blue(color == 'blue')
Что похоже на запрос OP.Но с чего бы это?
Лучший подход - это что-то вроде этого:
scope :color, ->(color) { where(color: color) if color.present? }
Что можно назвать так:
Car.color('blue') # returns blue cars
Car.color(nil) # returns all cars
Car.color(params[:color]) # returns either all cars or only cars of a specific color, depending on value of param[:color]
Car.color(params[:color]).transmission(params[:transmission]).price(params[:price])
Ваш пробег может отличаться.