Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #6485: polymorphic_sti_associations_plus_has_many_through_1.2.3.diff

File polymorphic_sti_associations_plus_has_many_through_1.2.3.diff, 5.5 kB (added by chriseppstein, 1 year ago)

Cumulative patch that fixes polymorphic associations for has_many :through as well.

  • a/vendor/rails/activerecord/lib/active_record/associations.rb

    old new  
    704704                 
    705705                if association.updated? 
    706706                  self["#{reflection.primary_key_name}"] = association.id 
    707                   self["#{reflection.options[:foreign_type]}"] = association.class.base_class.name.to_s 
     707                  self["#{reflection.options[:foreign_type]}"] = association.class.name.to_s 
    708708                end 
    709709              end 
    710710            EOF 
  • a/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb

    old new  
    100100        def set_belongs_to_association_for(record) 
    101101          if @reflection.options[:as] 
    102102            record["#{@reflection.options[:as]}_id"]   = @owner.id unless @owner.new_record? 
    103             record["#{@reflection.options[:as]}_type"] = @owner.class.base_class.name.to_s 
     103            record["#{@reflection.options[:as]}_type"] = @owner.class.name.to_s 
    104104          else 
    105105            record[@reflection.primary_key_name] = @owner.id unless @owner.new_record? 
    106106          end 
  • a/vendor/rails/activerecord/lib/active_record/associations/has_many_association.rb

    old new  
    187187            when @reflection.options[:as] 
    188188              @finder_sql =  
    189189                "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_id = #{@owner.quoted_id} AND " +  
    190                 "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class.base_class.name.to_s)}" 
     190                "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote @owner.class.name.to_s}" 
    191191              @finder_sql << " AND (#{conditions})" if conditions 
    192192             
    193193            else 
  • a/vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb

    old new  
    130130        def construct_owner_attributes(reflection) 
    131131          if as = reflection.options[:as] 
    132132            { "#{as}_id" => @owner.id, 
    133               "#{as}_type" => @owner.class.base_class.name.to_s } 
     133              "#{as}_type" => @owner.class.name.to_s } 
    134134          else 
    135135            { reflection.primary_key_name => @owner.id } 
    136136          end 
     
    140140        def construct_join_attributes(associate) 
    141141          returning construct_owner_attributes(@reflection.through_reflection).merge(@reflection.source_reflection.primary_key_name => associate.id) do |join_attributes| 
    142142            if @reflection.options[:source_type] 
    143               join_attributes.merge!(@reflection.source_reflection.options[:foreign_type] => associate.class.base_class.name.to_s) 
     143              join_attributes.merge!(@reflection.source_reflection.options[:foreign_type] => associate.class.name.to_s) 
    144144            end 
    145145          end 
    146146        end 
     
    150150          if as = reflection.options[:as] 
    151151            { "#{as}_id" => @owner.quoted_id, 
    152152              "#{as}_type" => reflection.klass.quote_value( 
    153                 @owner.class.base_class.name.to_s, 
     153                @owner.class.name.to_s, 
    154154                reflection.klass.columns_hash["#{as}_type"]) } 
    155155          else 
    156156            { reflection.primary_key_name => @owner.quoted_id } 
  • a/vendor/rails/activerecord/lib/active_record/associations/has_one_association.rb

    old new  
    6969            when @reflection.options[:as] 
    7070              @finder_sql =  
    7171                "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_id = #{@owner.quoted_id} AND " +  
    72                 "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class.base_class.name.to_s)}"           
     72                "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote @owner.class.name.to_s}"           
    7373            else 
    7474              @finder_sql = "#{@reflection.table_name}.#{@reflection.primary_key_name} = #{@owner.quoted_id}" 
    7575          end