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.