Применять, где условие, если оно существует в рельсах - PullRequest
2 голосов
/ 23 января 2020

есть ли способ в рельсе activerecord применить условие where на основе условия?

Например: скажем, я хочу применить фильтр, если он присутствует во входных параметрах. Предположим, что @name является обязательным полем, а @salary - необязательным.

@name = "test_name"
@salary = 2000

Я хочу сделать что-то вроде ниже:

Employee.where(name: @name)
        .where(salary: @salary) if @salary.present?

Я знаю, чтобы сделать это в нескольких вызовах дБ , но я ищу вариант, чтобы это произошло за один вызов БД.

Ответы [ 3 ]

4 голосов
/ 23 января 2020

Вы можете присвоить результат 1-го where переменной и вызвать 2-й where условно:

@employees = Employee.where(name: @name)
@employees = @employees.where(salary: @salary) if @salary.present?
4 голосов
/ 23 января 2020

Вы можете запросить только по имеющимся параметрам:

args = { name: @name, salary: @salary.presence }
Employee.where(args.compact)
3 голосов
/ 23 января 2020

Вы можете просто добавить все возможные аргументы в один га sh и удалить те, которые nil с Hash#compact:

Employee.where({ name: @name, salary: @salary }.compact)
...