模型回调不与自引用关联一起使用

时间:2016-07-28 10:23:24

标签: ruby-on-rails ruby-on-rails-5 self-referencing-table

我的模型Evaluation有很多子评价(自我反射)

class Evaluation < ApplicationRecord

  has_many :sub_evaluations, class_name: "Evaluation", foreign_key: "parent_id", dependent: :destroy

  before_save :calculate_score

  def calculate_score
    # do something
  end

end

我正在使用子评估创建和更新评估作为嵌套属性。

calculate_score方法在创建子评估时触发,但在更新时不触发。我尝试过before_updateafter_validation。但似乎没有任何工作。

评估表

= form_for @evaluation do |f|
  ...
  = f.fields_for :sub_evaluations do |sub_evaluation|
   ...

似乎是什么问题?

1 个答案:

答案 0 :(得分:1)

article帮助我解决了这个问题。

未触发子回调,因为父级不是“脏”。

本文中的解决方案是通过调用attr_name_will_change来“强制”它变脏!在父属性上,事实上,它不会改变。

以下是更新的型号代码:

class Evaluation < ApplicationRecord

  has_many :sub_evaluations, class_name: "Evaluation", foreign_key: "parent_id", dependent: :destroy

  before_save :calculate_score

  def calculate_score
    # do something
  end

  def exam_id= val
    exam_id_will_change!
    @exam_id = val
  end

end

请参阅Rails API中的Active Model Dirty