Tatsoft.ru (logo)

Подробности

[rails] has_many … :through BUG solution. 

Столкнулся сегодня с багом вызова метода delete() для ассоциации has_many с использованием :through. Рельсы 1.2.3, так что вполне себе актуально. Чтобы это дело засветилось и в рунете тоже - переложу и сюда патч, который нашёл по этому занимательному поводу.
Класть в lib, потом в environment.rb делать require.

з.ы. вордпресс не даёт аттачить нормально, поэтому выложу inline



module ActiveRecord

  class HasManyThroughCantDisassociateNewRecords  associate.id)
      end

      # Remove +records+ from this association.  Does not destroy +records+.
      def delete(*records)
         return if records.empty?
         records.each { |associate| raise_on_type_mismatch(associate) }
         through = @reflection.through_reflection
         raise ActiveRecord::HasManyThroughCantDisassociateNewRecords.new(@owner, through) if @owner.new_record?

         load_target

         klass = through.klass
         klass.transaction do
           flatten_deeper(records).each do |associate|
             raise_on_type_mismatch(associate)
             raise ActiveRecord::HasManyThroughCantDisassociateNewRecords.new(@owner, through) unless associate.respond_to?(:new_record?) && !associate.new_record?

             @owner.send(@reflection.through_reflection.name).proxy_target.delete(klass.delete_all(construct_join_attributes(associate)))
             @target.delete(associate)
           end
         end

         self
       end
    end
  end
end

Комментарии

Олег Курносов:

много букв)

(Комментарий — 2:25 пп, Июль 21 )

Тимур Вафин:

Патчиком все таки более руляще класть…

(Комментарий — 11:58 дп, Окт 15 )

Оставить комментарий



Публикации по категориям

Самые читаемые

  • 5,107 прочтений: что такое wordpress (далее)
  • 4,580 прочтений: возможно самый отрицательный подкаст про RoR (далее)
  • 4,342 прочтений: Про нас написали Отцы! :) (далее)
  • 3,785 прочтений: Чем плох MySQL (далее)
  • 3,752 прочтений: 9 ошибок менеджера или почему задерживаются проекты (далее)
  • 3,668 прочтений: Впервые в России конференция в формате BarCamp (далее)
  • 3,192 прочтений: Конференция - взгляд из-за кулис (далее)
  • 2,741 прочтений: Автоматическая система синхронизация файлов между серверами (далее)
  • 2,572 прочтений: Сайт о преподах под прицелом? (далее)
  • 2,269 прочтений: jQuery – Javascript нового поколения (далее)

Добавление в рейтинги

Bobrdobr Memori Google YahooMyWeb Digg Technorati Delicious
количество читателей онлайн и всего Рекомендовать tatsoft.ru в МойКруг.ру

Активные участники

 4 Users Online из них сейчас на сайте

Облако тэгов