好的,我有两个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!
方法以前工作过,但现在没有做到应有的方法。它应找到与Services
关联的所有Server
,触发Resque
任务(有效),然后销毁Server
及其关联的Services
。
然而,正在发生的是它会破坏所有ServerServices
(字面意思是整个表),而不仅仅是与Server
对象关联的那个,这会打破所有关联。有什么明显的东西我在这里不见了吗?
答案 0 :(得分:0)
这是由servers_services表上ID列上的postgresql
序列损坏引起的。修复了序列,以便有一个有效的主键,一切都按预期工作。