毁灭不会毁灭

时间:2015-06-29 16:39:00

标签: ruby-on-rails

我有3个模型user formation& achat (让我们转换为某种结算

user某人购买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)但它没有帮助......

2 个答案:

答案 0 :(得分:1)

记录变量仍然可用甚至销毁。尝试

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

确保您已从数据库中删除记录

P.S。考虑使用destroyed? rails方法来理解

答案 1 :(得分:0)

正如@josh-burgess所指出的那样,你可以销毁然后重新加载对象。

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