2017-02-07 88 views
0

我有教室和学生模型之间的下列关系:Mongoid后/ before_remove回调没有被触发

Classroom has_many :students 
Student belongs_to :classroom 

在我的课堂模式,我有这些关系回调:

has_many :students, 
    after_add: :update_student_count, 
    before_remove: :update_student_count 


    def update_student_count(student) 
    self.student__count = students.count 
    self.save 
    end 

在我的学生控制器我有:

def destroy 
    student = Student.find params[:id] 
    student.destroy! 
    redirect_to action: :index 
end 

但是student.destroy!从不触发before_remove我的“课堂”模型中的回调。 我曾尝试写操作破坏下面的方式来执行摧毁课堂实例行动,但它似乎破坏着这种方式与mongoid使用...

def destroy 
    student = Student.find params[:id] 
    classroom= student.classroom 
    student.destroy! 
    classroom.students.destroy(student) 
    redirect_to action: :index 
    end 

为什么我before_remove回调从来没有执行?

回答

0

刚刚冲洗出来泰迪熊的解决方案,我想你可以做这样的事情:

class Student 
    belongs_to :classroom 

    after_destroy :update_student_count 
    after_create :update_student_count 

    def update_student_count 
    classroom.update_student_count 
    end 
end 

class Classroom 
    has_many :students 

    def update_student_count 
    self.student__count = students.count 
    save 
    end 
end