diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-01 11:43:53 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-01 11:43:53 -0800 |
commit | 5c7fd8766586dba42fba6fc738a733175dd9d46b (patch) | |
tree | 5f1653b6ca1a307828b10c1013b84e1e4e41a97e /activerecord/lib/active_record/reflection.rb | |
parent | 171172f324444a9ea9c98e4f3663c6e401fb3ec7 (diff) | |
parent | 12675988813e82ac30f7c0e0008c12c4cf5d8cdc (diff) | |
download | rails-5c7fd8766586dba42fba6fc738a733175dd9d46b.tar.gz rails-5c7fd8766586dba42fba6fc738a733175dd9d46b.tar.bz2 rails-5c7fd8766586dba42fba6fc738a733175dd9d46b.zip |
Merge remote branch 'jonleighton/association_fixes' into fuuu
* jonleighton/association_fixes:
Rename AssociationReflection#primary_key_name to foreign_key, since the options key which it relates to is :foreign_key
Support for :counter_cache on polymorphic belongs_to
Refactor BelongsToAssociation to allow BelongsToPolymorphicAssociation to inherit from it
Specify the STI type condition using SQL IN rather than a whole load of ORs. Required a fix to ActiveRecord::Relation#merge for properly merging create_with_value. This also fixes a situation where the type condition was appearing twice in the resultant SQL query.
Verify that when has_many associated objects are destroyed via :dependent => :destroy, when the parent is destroyed, the callbacks are run
Get rid of extra_conditions param from configure_dependency_for_has_many. I can't see a particularly plausible argument for this being used by plugins, and if they really want they can just redefine the callback or whatever. Note also that before my recent commit the extra_conditions param was completely ignored for :dependent => :destroy.
And owner_quoted_id can go too
Now we can drop-kick AssociationReflection#dependent_conditions into oblivion.
Refactor configure_dependency_for_has_many to use AssociationCollection#delete_all. It was necessary to change test_before_destroy in lifecycle_test.rb so that it checks topic.replies.size *before* doing the destroy, as afterwards it will now (correctly) be 0.
Diffstat (limited to 'activerecord/lib/active_record/reflection.rb')
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index 0310e7050d..81a95d4971 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -196,8 +196,8 @@ module ActiveRecord @quoted_table_name ||= klass.quoted_table_name end - def primary_key_name - @primary_key_name ||= options[:foreign_key] || derive_primary_key_name + def foreign_key + @foreign_key ||= options[:foreign_key] || derive_foreign_key end def primary_key_column @@ -251,7 +251,7 @@ module ActiveRecord false end - def through_reflection_primary_key_name + def through_reflection_foreign_key end def source_reflection @@ -298,17 +298,6 @@ module ActiveRecord !options[:validate].nil? ? options[:validate] : (options[:autosave] == true || macro == :has_many) end - def dependent_conditions(record, base_class, extra_conditions) - dependent_conditions = [] - dependent_conditions << "#{primary_key_name} = #{record.send(name).send(:owner_quoted_id)}" - dependent_conditions << "#{options[:as]}_type = '#{base_class.name}'" if options[:as] - dependent_conditions << klass.send(:sanitize_sql, options[:conditions]) if options[:conditions] - dependent_conditions << extra_conditions if extra_conditions - dependent_conditions = dependent_conditions.collect {|where| "(#{where})" }.join(" AND ") - dependent_conditions = dependent_conditions.gsub('@', '\@') - dependent_conditions - end - # Returns +true+ if +self+ is a +belongs_to+ reflection. def belongs_to? macro == :belongs_to @@ -321,7 +310,7 @@ module ActiveRecord class_name end - def derive_primary_key_name + def derive_foreign_key if belongs_to? "#{name}_id" elsif options[:as] @@ -403,11 +392,11 @@ module ActiveRecord end def through_reflection_primary_key - through_reflection.belongs_to? ? through_reflection.klass.primary_key : through_reflection.primary_key_name + through_reflection.belongs_to? ? through_reflection.klass.primary_key : through_reflection.foreign_key end - def through_reflection_primary_key_name - through_reflection.primary_key_name if through_reflection.belongs_to? + def through_reflection_foreign_key + through_reflection.foreign_key if through_reflection.belongs_to? end private |