diff options
author | Derek Kraan <derek.kraan@gmail.com> | 2013-01-11 12:29:30 -0500 |
---|---|---|
committer | Derek Kraan <derek.kraan@gmail.com> | 2013-01-11 12:31:09 -0500 |
commit | bc4edca7b178bcac4d259809e965368e30a692a8 (patch) | |
tree | 17335aa4e8be56b4b1492565fe2770ee490e5bb5 /activerecord/test/cases | |
parent | 7738222173e547ed92c6f85a64ececb766825cf3 (diff) | |
download | rails-bc4edca7b178bcac4d259809e965368e30a692a8.tar.gz rails-bc4edca7b178bcac4d259809e965368e30a692a8.tar.bz2 rails-bc4edca7b178bcac4d259809e965368e30a692a8.zip |
Fix .update_all and .delete_all when using a condition on a joined table
in a default_scope.
`Model.joins(...).where(condition_on_joined_table).update_all` /
`delete_all` worked, but the same operation implemented with a
default_scope generated a SQL error because ActiveRecord ignored the
join but implemented the where condition anyways.
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r-- | activerecord/test/cases/relation_scoping_test.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/activerecord/test/cases/relation_scoping_test.rb b/activerecord/test/cases/relation_scoping_test.rb index 78fb91d321..7388324a0d 100644 --- a/activerecord/test/cases/relation_scoping_test.rb +++ b/activerecord/test/cases/relation_scoping_test.rb @@ -161,6 +161,28 @@ class RelationScopingTest < ActiveRecord::TestCase assert !Developer.all.where_values.include?("name = 'Jamis'") end + + def test_default_scope_filters_on_joins + assert_equal 1, DeveloperFilteredOnJoins.all.count + assert_equal DeveloperFilteredOnJoins.all.first, developers(:david).becomes(DeveloperFilteredOnJoins) + end + + def test_update_all_default_scope_filters_on_joins + DeveloperFilteredOnJoins.update_all(:salary => 65000) + assert_equal 65000, Developer.find(developers(:david).id).salary + + # has not changed jamis + assert_not_equal 65000, Developer.find(developers(:jamis).id).salary + end + + def test_delete_all_default_scope_filters_on_joins + assert_not_equal [], DeveloperFilteredOnJoins.all + + DeveloperFilteredOnJoins.delete_all() + + assert_equal [], DeveloperFilteredOnJoins.all + assert_not_equal [], Developer.all + end end class NestedRelationScopingTest < ActiveRecord::TestCase |