Как вы можете сделать условную оговорку where с помощью AREL - PullRequest
28 голосов
/ 03 июня 2011

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

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

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

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

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

Ответы [ 2 ]

34 голосов
/ 03 июня 2011

Можно связать, где заявления

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

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

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

20 голосов
/ 03 июня 2011

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

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

residentials = Residential.where(h)
...