Как вы можете сделать условное предложение where, используя AREL

Как вы можете сделать условное предложение where? У меня есть задача rake, которая выполняет запрос. Скажем, я строю запрос следующим образом:

residentials = Residential.where(:is_active => true)

Теперь, если я передам определенный параметр задаче rake, я хочу добавить его в предложение where. Я думал примерно так:

residentials.where(:something_else => true) if param_was_passed

Но это просто заменяет существующее предложение where. Как я могу добавить его к существующим предложениям where?


person kidbrax    schedule 03.06.2011    source источник
comment
Является ли этот параметр для определенного поля в вашей модели Residential?   -  person Jits    schedule 03.06.2011
comment
на самом деле вы не используете здесь arel.   -  person tokland    schedule 08.07.2012


Ответы (2)


Можно связать операторы where

residentials = Residential.where(:is_active => true)
residentials = residentials.where(:other_thing => true) if param_was_passed

Это должно работать.

Убедитесь, что это не последняя строка в вызове функции; в этом случае повторите переменную residentials в качестве последней строки. (Согласно комментарию @digger69)

person Bert Goethals    schedule 03.06.2011
comment
Это то, что я пробовал, но это не сработало. Я проверю это еще раз и добавлю вывод сюда - person kidbrax; 03.06.2011
comment
Это должно работать, но будьте осторожны, если вы полагаетесь на то, что это будет возвращено функцией, поскольку функция возвращает значение последнего оператора, которое будет равно нулю, если !param_was_passed - person Mark Nadig; 14.08.2012

Вы можете создать хэш, а затем передать его методу .where. Что-то типа:

h = { }
h[:is_active] = true
h[:field_x] = true if param_was_passed

residentials = Residential.where(h)
person Jits    schedule 03.06.2011