mirror of
https://github.com/github/rails.git
synced 2026-02-12 07:04:54 -05:00
Fix configure_dependency_for_has_many not quoting conditions properly [#1461 state:resolved]
This commit is contained in:
committed by
Pratik Naik
parent
6f4b2469fb
commit
b17b9371c6
@@ -1453,7 +1453,7 @@ module ActiveRecord
|
||||
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
|
||||
@@ -1467,7 +1467,7 @@ module ActiveRecord
|
||||
delete_all_has_many_dependencies(record,
|
||||
"#{reflection.name}",
|
||||
#{reflection.class_name},
|
||||
"#{dependent_conditions}")
|
||||
%@#{dependent_conditions}@)
|
||||
end
|
||||
}
|
||||
when :nullify
|
||||
@@ -1477,7 +1477,7 @@ module ActiveRecord
|
||||
"#{reflection.name}",
|
||||
#{reflection.class_name},
|
||||
"#{reflection.primary_key_name}",
|
||||
"#{dependent_conditions}")
|
||||
%@#{dependent_conditions}@)
|
||||
end
|
||||
}
|
||||
else
|
||||
|
||||
@@ -665,6 +665,19 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
||||
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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user