aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorNeeraj Singh <neerajdotname@gmail.com>2010-06-28 17:17:56 -0400
committerJosé Valim <jose.valim@gmail.com>2010-06-29 01:18:20 +0200
commit40e87ac66912b06c31c98b057a49c64f5555dd99 (patch)
treeba71118993dfb0043d3ab0a75b661bc76ab5ee99 /activerecord/lib
parentf8011e67b002990e1c25550c161ab0af6af6620f (diff)
downloadrails-40e87ac66912b06c31c98b057a49c64f5555dd99.tar.gz
rails-40e87ac66912b06c31c98b057a49c64f5555dd99.tar.bz2
rails-40e87ac66912b06c31c98b057a49c64f5555dd99.zip
with_exclusive_scope does not work properly if ARel is passed. It does work nicely if hash is passed. Blow up if user is attempting it pass ARel to with_exclusive_scope.
[#3838 state:resolved] Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/base.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index fa239bafc6..8c10f86486 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -1156,7 +1156,20 @@ module ActiveRecord #:nodoc:
end
# Works like with_scope, but discards any nested properties.
+ # TODO : this method should be deprecated in favor of standard query API
def with_exclusive_scope(method_scoping = {}, &block)
+ if method_scoping.values.any? { |e| e.is_a?(ActiveRecord::Relation) }
+ msg =<<-MSG
+ ARel can not be used with_exclusive_scope. You can either specify hash style conditions to with_exclusive_scope like this:
+ User.with_exclusive_scope {:find => :conditions => {:active => true} } do
+ end
+
+ Or you can use unscoped method instead of with_exclusive_scope like this:
+ User.unscoped.where(:active => true) do
+ end
+ MSG
+ raise ArgumentError.new(msg)
+ end
with_scope(method_scoping, :overwrite, &block)
end