Ticket #6485: polymorphic_sti_associations_rails21.patch
| File polymorphic_sti_associations_rails21.patch, 7.3 kB (added by pawulonrails, 5 months ago) |
|---|
-
vendor/rails/activerecord/lib/active_record/associations.rb
old new 885 885 886 886 if association.updated? 887 887 self["#{reflection.primary_key_name}"] = association.id 888 self["#{reflection.options[:foreign_type]}"] = association.class. base_class.name.to_s888 self["#{reflection.options[:foreign_type]}"] = association.class.name.to_s 889 889 end 890 890 end 891 891 end … … 1260 1260 # Add polymorphic type if the :as option is present 1261 1261 dependent_conditions = [] 1262 1262 dependent_conditions << "#{reflection.primary_key_name} = \#{record.quoted_id}" 1263 dependent_conditions << "#{reflection.options[:as]}_type = '#{ base_class.name}'" if reflection.options[:as]1263 dependent_conditions << "#{reflection.options[:as]}_type = '#{name}'" if reflection.options[:as] 1264 1264 dependent_conditions << sanitize_sql(reflection.options[:conditions]) if reflection.options[:conditions] 1265 1265 dependent_conditions = dependent_conditions.collect {|where| "(#{where})" }.join(" AND ") 1266 1266 … … 1830 1830 jt_as_extra = " AND %s.%s = %s" % [ 1831 1831 connection.quote_table_name(aliased_join_table_name), 1832 1832 connection.quote_column_name(through_reflection.options[:as].to_s + '_type'), 1833 klass.quote_value(parent.active_record. base_class.name)1833 klass.quote_value(parent.active_record.name) 1834 1834 ] 1835 1835 else 1836 1836 jt_foreign_key = through_reflection.primary_key_name … … 1844 1844 as_extra = " AND %s.%s = %s" % [ 1845 1845 connection.quote_table_name(aliased_table_name), 1846 1846 connection.quote_column_name("#{source_reflection.options[:as]}_type"), 1847 klass.quote_value(source_reflection.active_record. base_class.name)1847 klass.quote_value(source_reflection.active_record.name) 1848 1848 ] 1849 1849 else 1850 1850 first_key = through_reflection.klass.base_class.to_s.foreign_key … … 1897 1897 parent.primary_key, 1898 1898 connection.quote_table_name(aliased_table_name), 1899 1899 "#{reflection.options[:as]}_type", 1900 klass.quote_value(parent.active_record. base_class.name)1900 klass.quote_value(parent.active_record.name) 1901 1901 ] 1902 1902 else 1903 1903 foreign_key = options[:foreign_key] || reflection.active_record.name.foreign_key -
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb
old new 146 146 def set_belongs_to_association_for(record) 147 147 if @reflection.options[:as] 148 148 record["#{@reflection.options[:as]}_id"] = @owner.id unless @owner.new_record? 149 record["#{@reflection.options[:as]}_type"] = @owner.class. base_class.name.to_s149 record["#{@reflection.options[:as]}_type"] = @owner.class.name.to_s 150 150 else 151 151 record[@reflection.primary_key_name] = @owner.id unless @owner.new_record? 152 152 end -
vendor/rails/activerecord/lib/active_record/associations/has_many_association.rb
old new 77 77 when @reflection.options[:as] 78 78 @finder_sql = 79 79 "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_id = #{@owner.quoted_id} AND " + 80 "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class. base_class.name.to_s)}"80 "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class.name.to_s)}" 81 81 @finder_sql << " AND (#{conditions})" if conditions 82 82 83 83 else -
vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb
old new 87 87 def construct_owner_attributes(reflection) 88 88 if as = reflection.options[:as] 89 89 { "#{as}_id" => @owner.id, 90 "#{as}_type" => @owner.class. base_class.name.to_s }90 "#{as}_type" => @owner.class.name.to_s } 91 91 else 92 92 { reflection.primary_key_name => @owner.id } 93 93 end … … 99 99 raise ActiveRecord::HasManyThroughCantAssociateThroughHasManyReflection.new(@owner, @reflection) if @reflection.source_reflection.macro == :has_many 100 100 join_attributes = construct_owner_attributes(@reflection.through_reflection).merge(@reflection.source_reflection.primary_key_name => associate.id) 101 101 if @reflection.options[:source_type] 102 join_attributes.merge!(@reflection.source_reflection.options[:foreign_type] => associate.class. base_class.name.to_s)102 join_attributes.merge!(@reflection.source_reflection.options[:foreign_type] => associate.class.name.to_s) 103 103 end 104 104 join_attributes 105 105 end … … 109 109 if as = reflection.options[:as] 110 110 { "#{as}_id" => @owner.quoted_id, 111 111 "#{as}_type" => reflection.klass.quote_value( 112 @owner.class. base_class.name.to_s,112 @owner.class.name.to_s, 113 113 reflection.klass.columns_hash["#{as}_type"]) } 114 114 else 115 115 { reflection.primary_key_name => @owner.quoted_id } -
vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb
old new 64 64 when @reflection.options[:as] 65 65 @finder_sql = 66 66 "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_id = #{@owner.quoted_id} AND " + 67 "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class. base_class.name.to_s)}"67 "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class.name.to_s)}" 68 68 else 69 69 @finder_sql = "#{@reflection.quoted_table_name}.#{@reflection.primary_key_name} = #{@owner.quoted_id}" 70 70 end