Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can you do a conditional where clause using AREL

How can you do a conditional where clause? I have a rake task that runs a query. Say I am building a query like so:

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

Now if I pass a certain parameter to the rake task, I want to add to the where clause. I was thinking something like this:

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

But that just replaces the existing where clause. How can I add it to the existing where clauses?

like image 417
kidbrax Avatar asked Jun 03 '11 13:06

kidbrax


2 Answers

It is possible to chain where statements

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

This should work.

Make sure this is not the last line in a function call; repeat the residentials variable as the last line in that case. (As per @digger69 comment)

like image 195
Bert Goethals Avatar answered Nov 20 '22 14:11

Bert Goethals


You could build up the hash and then provide it to the .where method. Something like:

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

residentials = Residential.where(h)
like image 45
Jits Avatar answered Nov 20 '22 14:11

Jits