Присвойте значение переменной, используя ||оператор с условием if в Ruby - PullRequest
2 голосов
/ 11 ноября 2019

Я пытаюсь написать логику для поискового запроса. Есть много разных условий с разными параметрами. Один параметр, отправляемый из формы - code. Таким образом, в двух разных таблицах есть значения code: competitions и responses. Мне нужно сначала проверить значение params[:code] в таблице competitions, а если оно не существует, то проверить в таблице responses. Если он не существует ни в одной из таблиц, он должен вернуть nil. Я пытаюсь записать это в одном if заявлении. Код, который я попробовал, приведен ниже:

competitions = Competition.includes(:event, :responses)
if params[:code].present?
  competitions = (competitions.where(code: params[:code])) || 
  (competitions.joins(:responses).where(responses: { code: params[:code] }))

Приведенный выше код проверяет только значение competitions.where(code: params[:code]). Если это значение [], то оно не оценивает второе условие. Какие изменения я должен сделать, чтобы приведенный выше код работал в соответствии с требованиями, указанными выше?

1 Ответ

5 голосов
/ 11 ноября 2019

competitions.where(code: params[:code]) возвращает объект Relation, который всегда правдив.

К счастью, он реализует метод #presence, возвращающий либо значение, если оно не пустое, либо nil. Итак, это должно работать:

competitions.where(code: params[:code]).presence || ...
...