Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > Ассоциации, не работает callback


Автор: DimanLin 29.3.2009, 00:45
Контроллер
 News.destroy(params[:id])


Модель:

class News < ActiveRecord::Base
  

  has_one :prevnewsimage, :dependent => :destroy
  has_many :newsimages, :dependent => :destroy, :before_remove => :removenewsimagqe

  validates_presence_of :header, :prevtext, :text
  validates_length_of :header, :maximum => 255

@@onpage = 8
  def self.perpage(page)
    
    offset = (page.to_i * @@onpage) - @@onpage
    self.find(:all, :offset => "#{offset}", :limit => "#{@@onpage}")
  end

def removenewsimagqe(newsimage)
    File.delete("#{RAILS_ENV}/public/newsimage/#{newsimage.name}")
end

def removeprevimages(previmages)
    File.delete("#{RAILS_ENV}/public/newsimage/#{previmages.name}")
end
end


Не могу добиться удаления картинок для модели newsimage.
Все дочерние ассоциации по отношению к News удаляются, а callback(before_remove) для newsimage не вызывается....
А почему? 

Делаю изходя из документации http://guides.rubyonrails.org/association_basics.html
Раздел: 4.5 Association Callbacks

Автор: DimanLin 1.4.2009, 20:58
Решил проблемму немного подругому но как мне кажется более верным способом.
В документации http://guides.rubyonrails.org/association_basics.html
Раздела 4.5 Association Callbacks
В этом разделе приведён пример использования callback метода:

=================================================
class Customer < ActiveRecord::Base 

      has_many :orders, :before_add => :check_credit_limit  

      def check_credit_limit(order)  
.............................
      end 

end 
=================================================
В моём коде за основу брался этотже пример. Разница была только в типе ассоциативного калбака, в примере :before_add у меня before_remove

has_many :newsimages, :dependent => :destroy, :before_remove => :removenewsimagqe

def removenewsimagqe(newsimage)
    File.delete("#{RAILS_ENV}/public/newsimage/#{newsimage.name}")
end

Вызов метода removenewsimagqe не происходил. Так и не разобрался почему...

Из документации видно, что есть ещё простые колбаки(не ассоциативные).
http://guides.rubyonrails.org/activerecord_validations_callbacks.html#callbacks-overview
Сним всё заработало. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)