Skip to content

Commit

Permalink
Fix configure_dependency_for_has_many not quoting conditions properly [
Browse files Browse the repository at this point in the history
…rails#1461 state:resolved]
  • Loading branch information
fcheung authored and lifo committed Dec 21, 2008
1 parent 6f4b246 commit b17b937
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 3 deletions.
6 changes: 3 additions & 3 deletions activerecord/lib/active_record/associations.rb
Expand Up @@ -1453,7 +1453,7 @@ def configure_dependency_for_has_many(reflection, extra_conditions = nil)
dependent_conditions << sanitize_sql(reflection.options[:conditions]) if reflection.options[:conditions]
dependent_conditions << extra_conditions if extra_conditions
dependent_conditions = dependent_conditions.collect {|where| "(#{where})" }.join(" AND ")

dependent_conditions = dependent_conditions.gsub('@', '\@')
case reflection.options[:dependent]
when :destroy
method_name = "has_many_dependent_destroy_for_#{reflection.name}".to_sym
Expand All @@ -1467,7 +1467,7 @@ def configure_dependency_for_has_many(reflection, extra_conditions = nil)
delete_all_has_many_dependencies(record,
"#{reflection.name}",
#{reflection.class_name},
"#{dependent_conditions}")
%@#{dependent_conditions}@)
end
}
when :nullify
Expand All @@ -1477,7 +1477,7 @@ def configure_dependency_for_has_many(reflection, extra_conditions = nil)
"#{reflection.name}",
#{reflection.class_name},
"#{reflection.primary_key_name}",
"#{dependent_conditions}")
%@#{dependent_conditions}@)
end
}
else
Expand Down
13 changes: 13 additions & 0 deletions activerecord/test/cases/associations/has_many_associations_test.rb
Expand Up @@ -665,6 +665,19 @@ def test_dependent_association_respects_optional_sanitized_conditions_on_delete
assert_equal 1, Client.find_all_by_client_of(firm.id).size
end

def test_dependent_association_respects_optional_hash_conditions_on_delete
firm = companies(:odegy)
Client.create(:client_of => firm.id, :name => "BigShot Inc.")
Client.create(:client_of => firm.id, :name => "SmallTime Inc.")
# only one of two clients is included in the association due to the :conditions key
assert_equal 2, Client.find_all_by_client_of(firm.id).size
assert_equal 1, firm.dependent_sanitized_conditional_clients_of_firm.size
firm.destroy
# only the correctly associated client should have been deleted
assert_equal 1, Client.find_all_by_client_of(firm.id).size
end


def test_creation_respects_hash_condition
ms_client = companies(:first_firm).clients_like_ms_with_hash_conditions.build

Expand Down
1 change: 1 addition & 0 deletions activerecord/test/models/company.rb
Expand Up @@ -80,6 +80,7 @@ class ExclusivelyDependentFirm < Company
has_one :account, :foreign_key => "firm_id", :dependent => :delete
has_many :dependent_sanitized_conditional_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all, :conditions => "name = 'BigShot Inc.'"
has_many :dependent_conditional_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all, :conditions => ["name = ?", 'BigShot Inc.']
has_many :dependent_hash_conditional_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all, :conditions => {:name => 'BigShot Inc.'}
end

class Client < Company
Expand Down

0 comments on commit b17b937

Please sign in to comment.