Permalink
Browse files

Fix configure_dependency_for_has_many not quoting conditions properly [

…#1461 state:resolved]
  • Loading branch information...
1 parent 6f4b246 commit b17b9371c6a26484eb1984d45acffcdcd91b1ae1 @fcheung fcheung committed with lifo Dec 21, 2008
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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

0 comments on commit b17b937

Please sign in to comment.