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

Ticket #6485: polymorphic_sti_associations_bug.diff

File polymorphic_sti_associations_bug.diff, 3.2 kB (added by antonio, 2 years ago)

Patch to correct polymorphic assoc and STI

  • activerecord/lib/active_record/associations/association_proxy.rb

    old new  
    8787        def set_belongs_to_association_for(record) 
    8888          if @reflection.options[:as] 
    8989            record["#{@reflection.options[:as]}_id"]   = @owner.id unless @owner.new_record? 
    90             record["#{@reflection.options[:as]}_type"] = @owner.class.base_class.name.to_s 
     90            record["#{@reflection.options[:as]}_type"] = @owner.class.name.to_s 
    9191          else 
    9292            record[@reflection.primary_key_name] = @owner.id unless @owner.new_record? 
    9393          end 
  • 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 @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 
  • activerecord/lib/active_record/associations/has_many_association.rb

    old new  
    167167            when @reflection.options[:as] 
    168168              @finder_sql =  
    169169                "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_id = #{@owner.quoted_id} AND " +  
    170                 "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote @owner.class.base_class.name.to_s}" 
     170                "#{@reflection.klass.table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote @owner.class.name.to_s}" 
    171171              @finder_sql << " AND (#{conditions})" if conditions 
    172172             
    173173            else 
  • activerecord/lib/active_record/associations.rb

    old new  
    659659                 
    660660                if association.updated? 
    661661                  self["#{reflection.primary_key_name}"] = association.id 
    662                   self["#{reflection.options[:foreign_type]}"] = association.class.base_class.name.to_s 
     662                  self["#{reflection.options[:foreign_type]}"] = association.class.name.to_s 
    663663                end 
    664664              end 
    665665            EOF