2015-06-29 215 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