不会触发Mongoid after / before_remove回调

时间:2017-02-07 16:01:03

标签: ruby-on-rails callback mongoid

我在课堂和学生模型之间有以下关系:

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回调。 我尝试用以下方式编写动作destroy来对教室实例执行destroy动作,但似乎无法以这种方式使用mongoid ...

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

为什么我的before_remove回调从未执行过?

2 个答案:

答案 0 :(得分:0)

请尝试使用before_destroy。 这是回调的Mongoid文档

答案 1 :(得分: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