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 开发者_StackOverflow社区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?
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)
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)
精彩评论