Ruby on Rails Monday, December 29, 2014


You can do that inside a .try{} block too, same idea: 


Order.try{|query| 
if x==1
  query
else
  query.unscope(:where)
 






On Dec 29, 2014, at 4:30 AM, Frederick Cheung <frederick.cheung@gmail.com> wrote:



On Monday, December 29, 2014 1:16:40 AM UTC, Josh 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.


Sounds like you are looking for 

 some_scope.unscope(:where) 


Fred


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 rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/1804d715-ebbc-48c9-892b-d73f72b6f1f7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment