Skip to content

Commit c5e109b

Browse files
committed
Make sure default_scope#create checks for options[:conditions] [#2181 state:resolved] [James Le Cuirot]
1 parent 5e190ef commit c5e109b

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

activerecord/lib/active_record/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2176,7 +2176,7 @@ def subclasses #:nodoc:
21762176
# default_scope :order => 'last_name, first_name'
21772177
# end
21782178
def default_scope(options = {})
2179-
self.default_scoping << { :find => options, :create => (options.is_a?(Hash) && options.has_key?(:conditions)) ? options[:conditions] : {} }
2179+
self.default_scoping << { :find => options, :create => options[:conditions].is_a?(Hash) ? options[:conditions] : {} }
21802180
end
21812181

21822182
# Test whether the given method and optional key are scoped.

activerecord/test/cases/method_scoping_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,16 @@ def test_default_scope
591591
assert_equal expected, received
592592
end
593593

594+
def test_default_scope_with_conditions_string
595+
assert_equal Developer.find_all_by_name('David').map(&:id).sort, DeveloperCalledDavid.all.map(&:id).sort
596+
assert_equal nil, DeveloperCalledDavid.create!.name
597+
end
598+
599+
def test_default_scope_with_conditions_hash
600+
assert_equal Developer.find_all_by_name('Jamis').map(&:id).sort, DeveloperCalledJamis.all.map(&:id).sort
601+
assert_equal 'Jamis', DeveloperCalledJamis.create!.name
602+
end
603+
594604
def test_default_scoping_with_threads
595605
scope = [{ :create => {}, :find => { :order => 'salary DESC' } }]
596606

activerecord/test/models/developer.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,13 @@ def self.all_ordered_by_name
8989
end
9090
end
9191
end
92+
93+
class DeveloperCalledDavid < ActiveRecord::Base
94+
self.table_name = 'developers'
95+
default_scope :conditions => "name = 'David'"
96+
end
97+
98+
class DeveloperCalledJamis < ActiveRecord::Base
99+
self.table_name = 'developers'
100+
default_scope :conditions => { :name => 'Jamis' }
101+
end

0 commit comments

Comments
 (0)