Rails嵌套属性错误未传播

时间:2019-02-19 13:11:15

标签: ruby-on-rails ruby nested-attributes

我有以下型号:

class CourseSection < ApplicationRecord
  has_many :tasks, through: :content_refs, source: :content, source_type: "Task"
  ...
end

class ContentRef < ApplicationRecord
  before_destroy do
    if task_completions.any?
      errors.add(:content_ref, "has associated task completions and can't be deleted. Try archiving it instead.")
      course_section.errors.add(:content_ref, "has associated task completions and can't be deleted. Try archiving it instead.")
      throw(:abort)
    end
  end

  belongs_to :course_section
  has_one :task, :through => :self_ref, :source => :content, :source_type => 'Task'
  ...
end

class Task < ApplicationRecord
  has_many :referring_content_refs, as: :content, dependent: :destroy, class_name: "ContentRef"
  ...
end

我正在通过CourseSectionsController中的嵌套属性来操作任务,

@course_section.update update_attributes_params

update_attributes_params在哪里

<ActionController::Parameters {"tasks_attributes"=>{"0"=>{"title"=>"Task", "id"=>"6", "_destroy"=>"1"}}} permitted: true>

基于这些参数,它尝试破坏Task,这将触发从属的:destroy并试图破坏ContentRef。在此触发before_destroy并执行检查,并在这种情况下输入if,插入错误并中止。最后,这导致Task未被破坏,但控制器中的@course_section没有任何错误,因此它不知道出了什么问题。另外.update返回true,我也不明白。它不应该知道有一个异常终止并返回false吗?

现在,在这种情况下,控制器的行为就好像没有任何问题,并且更新成功。

0 个答案:

没有答案