Так как вам нужно сделать, когда запрос по тому же полю в соответствии с выбранным пользователем оператором, вы можете сделать это следующим образом:
Метод 1:
Добавитьметод, который будет возвращать правильный оператор, основанный на том, что вы получаете из представления:
def operator_chosen(op)
case op
when '>'
'>='
when '<'
'<='
when '='
'=='
else
'<>'
end
end
Я добавил не равно в качестве случая по умолчанию, вы можете использовать равно как в качестве значения по умолчанию.И тогда вы можете сделать так:
where("rating #{operator_chosen(s_comp_sign)} s_rating") if s_comp_sign.present?
Метод 2:
Вы также можете сделать это с помощью троичного оператора, но код не будет таким читабельным,это будет выглядеть сложным, как это:
op = (s_comp_sign == '>' ? '>=' : (s_comp_sign == '<' ? '<=' : '=='))
Здесь по умолчанию будет ==
, а затем это можно использовать как:
where("rating #{op} s_rating") if s_comp_sign.present?