You can use a .try{ |query| ... } block inside the Arel chain.

I think to achieve what you want you would do something like


Order.where(id: 1).try{|query| if continue_with_query; query; else; Order; end}


Notice that inside the try block I'm passing back either the query (with Arel 
constraints) or a new Order class object (which will "reset" all the 
constraints because it'll be a new object)

I actually think a better design would be to adopt this try-block method for 
all your constraints, and then add them optionally depending on your if 
statement. then you don't have to do any "resetting" at all because each 
individual step will either return the original query or will return the query 
with more scope restrictions on it.

-Jason



> On Dec 28, 2014, at 8:16 PM, Josh <[email protected]> wrote:
> 
> I'd like to remove all existing constraints from an ActiveRecord::Relation 
> and leave the rest in-tact.
> 
> I am not looking for #unscoped since I would like to keep any joins/order 
> clauses around.
> 
> Additionally, I would like to re-use the constraints that were removed in 
> another query, so the ability to call #to_sql on them would be a very nice 
> bonus.
> 
> 
> 
> This is the best I've been able to hack together:
> 
> Order.where(id: 1).where(id: 2).arel.constraints[0].to_sql
> 
>  => "`orders`.`id` = 1 AND `orders`.`id` = 2"
> 
> ...but that just seems wrong.  As far as I can tell #constraints always has 
> one item in it, but I don't know that will always be true.
> 
> 
> 
> Thanks!
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/bbc2f6bd-8713-472d-b184-e737a83d0929%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/rubyonrails-talk/bbc2f6bd-8713-472d-b184-e737a83d0929%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

----

Jason Fleetwood-Boldt
[email protected]
http://www.jasonfleetwoodboldt.com/writing

All material © Jason Fleetwood-Boldt 2014. Public conversations may be turned 
into blog posts (original poster information will be made anonymous). Email 
[email protected] with questions/concerns about this.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/23EF6B6B-F9D1-4F31-A873-8467F7B0071E%40datatravels.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to