before_destroy не запускается из update_attributes

У меня есть студент, у которого много курсов. В действии и форме обновления # ученика я принимаю список course_ids. Когда этот список меняется, я бы хотел вызвать определенную функцию. У моего кода вызывается , если update_attributes создает course_student, но не вызывается , если update_attributes разрушает course_student. Могу ли я получить это в огонь, или я должен сам обнаружить изменения?

# app/models/student.rb
class Student < ActiveRecord::Base
  belongs_to :teacher
  has_many :grades
  has_many :course_students, :dependent => :destroy
  has_many :courses, :through => :course_students
  has_many :course_efforts, :through => :course_efforts

  # Uncommenting this line has no effect:
  #accepts_nested_attributes_for :course_students, :allow_destroy => true

  #attr_accessible :first_name, :last_name, :email, :course_students_attributes

  validates_presence_of :first_name, :last_name
...
end

# app/models/course_student.rb
class CourseStudent < ActiveRecord::Base
  after_create  :reseed_queues
  before_destroy :reseed_queues

  belongs_to :course
  belongs_to :student

  private

  def reseed_queues
    logger.debug "******** attempting to reseed queues"
    self.course.course_efforts.each do |ce|
      ce.reseed
    end
  end

end

# app/controllers/students_controller.rb

  def update
    params[:student][:course_ids] ||= []
    respond_to do |format|
      if @student.update_attributes(params[:student])
        format.html { redirect_to(@student, :notice => 'Student was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @student.errors, :status => :unprocessable_entity }
      end
    end
  end
7
задан Chris 23 August 2010 в 15:56
поделиться

2 ответа

Если ваш CourseStudent указывает own_to: student,: independent =>: destroy , похоже, что запись CourseStudent не будет действительна без студента.

Пытаясь следить за обсуждением LH, на которое я ссылался выше, и этим , я бы также попытался переместить обратный вызов before_destroy в CourseStudent ниже own_to . Связанный пример демонстрирует, как порядок обратных вызовов имеет значение для after_create , возможно, то же самое применимо к before_destroy . И, конечно же, поскольку вы используете Edge Rails, я бы также попробовал RC, возможно, они исправили ошибку.

В противном случае я бы попытался создать действительно простое приложение на Rails с двумя моделями, демонстрирующими проблему, и опубликовать его в Rails 'Lighthouse.

0
ответ дан 6 December 2019 в 22:59
поделиться

Принимает вложенные атрибуты, для запуска вложенного уничтожения требуется флаг. По крайней мере, так было когда-то.

1
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: