diff options
-rw-r--r-- | activerecord/lib/active_record/base.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/named_scope.rb | 9 |
2 files changed, 8 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index cba1058315..82687fce9d 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -2082,6 +2082,8 @@ MSG end def populate_with_current_scope_attributes + return unless self.class.scope_attributes? + self.class.scope_attributes.each do |att,value| send("#{att}=", value) if respond_to?("#{att}=") end diff --git a/activerecord/lib/active_record/named_scope.rb b/activerecord/lib/active_record/named_scope.rb index 35fb6fce03..0313abe456 100644 --- a/activerecord/lib/active_record/named_scope.rb +++ b/activerecord/lib/active_record/named_scope.rb @@ -47,15 +47,18 @@ module ActiveRecord if current_scope current_scope.scope_for_create else - # Return an empty hash in the simple case - return {} unless default_scopes.any? - scope = relation.clone scope.default_scoped = true scope.scope_for_create end end + ## + # Are there default attributes associated with this scope? + def scope_attributes? # :nodoc: + current_scope || default_scopes.any? + end + # Adds a class method for retrieving and querying objects. A \scope represents a narrowing of a database query, # such as <tt>where(:color => :red).select('shirts.*').includes(:washing_instructions)</tt>. # |