2012-06-20 99 views
2

好了,我有2個型號,一個has_many :through關係:依賴摧毀走出去的範圍

class Server < ActiveRecord::Base 
    has_many :services, :through :servers_services, :dependent => :destroy 
    has_many :servers_services, :dependent => :destroy 

    def destroy! 
    options = {:name => self.name, :services => self.services.map { |s| s.attributes }} 
    Resque.enqueue(Cluster::DestroyServer, options) 
    self.destroy 
    end 
end 

class Service 
    has_many :servers, :through => :servers_services 
    has_many :servers_services 
end 

這些連接通過:

class ServersService < ActiveRecord::Base 
    belongs_to :server 
    belongs_to :service 
end 

destroy!方法在以前的服務器模型中工作,但現在沒有做它應該做的。它應該找到與Server關聯的所有Services,觸發Resque任務(其工作原理),然後銷燬Server及其關聯的Services

然而,它正在銷燬所有ServerServices(字面上整個表格),而不僅僅是與Server對象關聯的對象,它打破了所有關聯。有什麼明顯的我在這裏失蹤?

回答

0

這是由servers_services表上的ID列上破壞的postgresql序列造成的。修復序列,以便有一個有效的主鍵,並且一切都按預期再次運行。