2016-06-06 77 views
1

我有以下情況:相關:銷燬工作不

user.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    after_create :create_profile 
    after_create :programstart 

    has_one :profile, dependent: :destroy 
    has_many :weights, dependent: :destroy 
    has_many :programstarts, dependent: :destroy 

    has_many :user_nutrients, dependent: :destroy 
    has_many :nutrients, through: :user_nutrients, dependent: :destroy 


    private 

    def programstart 
    Programstart.create(:user_id => id) 
    end 
end 

nutrient.rb

class Nutrient < ActiveRecord::Base 
    validates :name, uniqueness: true 

    has_many :user_nutrients 
    has_many :users, through: :user_nutrients 
end 

user_nutrient.rb

class UserNutrient < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :nutrient 
end 

對於簡介,權重和programstarts dependent: :destroy作品。刪除用戶時,所有關聯的數據庫條目都將被刪除。但是,對於user_nutrientsdependent: :destroy不起作用。刪除用戶後,這些條目仍然存在。

我在這裏錯過了什麼?

+0

有什麼錯誤信息運行回調after_destroy? –

+0

沒有錯誤信息。我從控制檯中刪除用戶,除了user_nutrients表中的記錄外,所有從屬記錄都將被刪除。 – Oliver

回答

0

我看你的模型關係應該是這樣的:

has_many :user_nutrients, dependent: :destroy 
has_many :nutrients, through: :user_nutrients 

我想是因爲相關的nutrient記錄被破壞,因此連接表中的記錄不能被刪除,即它們變成了孤兒。實際上,您只應在連接表中運行dependent: :destroy

如果你仍然想破壞nutrient記錄,那麼也許在user模型

+0

試過 - 記錄仍然存在。其實我現在嘗試過每一種組合。這是行不通的。 – Oliver

+0

你的意思是'user_nutrient'表中的記錄在銷燬相關用戶後仍然存在? – kasperite

+0

是的。我有一個用戶在weight,profiles,programstarts和user_nutrients表中創建記錄。如果我現在刪除此用戶權重,配置文件和programstarts表中的所有記錄被刪除。唯一保留的記錄是user_nutrients表中的記錄。 – Oliver