2015-06-29 249 views
0

我有3種型號userformation & achat(讓我們翻譯成一種計費的)破壞不破壞

A user cand buy a formation,它會創建一個achat。由於原因,我需要刪除一個achat。但我沒有成功。我嘗試了以下工作流程來檢查我的代碼:

irb(main):048:0> u.achats.length 
=> 1 
irb(main):049:0> u.achats.first.destroy! 
    (0.1ms) BEGIN 
    (0.1ms) COMMIT 
=> #<Achat id: 8, formation_id: 14, created_at: "2015-06-29 16:08:39", nom_formation: "foo", prix: 0.0, quantite: 1, chapitre_id: nil, user_id: 10, taux_commission: 35, updated_at: "2015-06-29 16:08:39", numero_facture: nil, bon_reduction_id: nil> 
irb(main):050:0> u.achats.length 
=> 1 

因此它不會從數據庫中刪除。我應該如何銷燬achat


這裏是我的模型的(簡單)版本:

# coding: utf-8 
class User < ActiveRecord::Base 
    rolify :role_cname => 'Role' 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    #Tous les achats de cette utilisateur 
    has_many :achats 
    #Toutes les formations achetés par cet utilisateur 
    has_many :formations, :through => :achats 
end 


#Classe liant une formation à un utilisateur 
class Achat < ActiveRecord::Base 

    #Lien vers l'utilisateur qui a acheté cette formation 
    belongs_to :user 
    #Appartient à la classe Formation 
    belongs_to :formation 

end 

#Classe récupérant les différentes informations liées à toutes les formations présentes pour le site 
class Formation < ActiveRecord::Base 

    #Auteur de cette formation 
    belongs_to :user 

    # Gestion de la relation pour l'achat 
    has_many :achats 

    #Si la formation est publique alors on ne fait que changer le statut et la date de suppression 
    #Si la formation n'a jamais été publié, alors on la supprime totalement de la base 
    def destroy 
    #Si la formation est déja supprimée on bloque la chose 
    if(self.status.id == 3) 
     return FORMATION_DEJA_SUPPRIME 
    else 
     update_attribute(:status, Status.find(2)) 
    end 
    end 

    # Gestion de la suppression d'un produit 
    def delete! 
    update_attribute(:dateSuppression, Time.now) 
    end 
end 

我經歷過這樣的問題:dependent: :destroy doesn't work (has_many association)但它並沒有幫助...

+0

您是否嘗試過重新加載'u'? 'u.reload'或'u.reload!'是命令,具體取決於你的Rails版本。 –

+0

你有任何回調? – Gerep

回答

1

記錄變量仍甚至可以銷燬。嘗試

Achat.find(8) # or some another destroyed id 

,以確保你已經從數據庫

附註:刪除的記錄考慮destroyed?軌道的理解方法

+0

儘管變量可用,但長度不應該返回1,它應該更新 – Gerep

+0

不可以。你見過sql查詢嗎?看起來這個值被緩存了。 – asiniy

0

正如@喬什伯吉斯也指出,你可以銷燬,然後重新加載對象。

u.achats.first.destroy! 
u.achats.reload