Ruby on rails 嵌套资源被破坏,但相关模型应防止这种情况(Rails 5中的验证)

Ruby on rails 嵌套资源被破坏,但相关模型应防止这种情况(Rails 5中的验证),ruby-on-rails,validation,ruby-on-rails-5,nested-attributes,Ruby On Rails,Validation,Ruby On Rails 5,Nested Attributes,我有一个TimeWorked类,它与事件的关系为1或0 该事件在我的控制器中作为TimeWorked的嵌套_资源进行操作,对于创建和更新非常有效 我对TimeWorked进行验证,以便在对象签名为final时防止修改、更新或销毁 我遵循了所有更新的答案,因为Rails 5改变了我在这里看到的chain_停止工作的方式 到目前为止,我可以防止销毁或更新我的主模型TimeWorked,但即使使用throw:abort ActiveRecord,它仍然会销毁与之关联的资源TimeWorkedEvent

我有一个TimeWorked类,它与事件的关系为1或0

该事件在我的控制器中作为TimeWorked的嵌套_资源进行操作,对于创建和更新非常有效

我对TimeWorked进行验证,以便在对象签名为final时防止修改、更新或销毁

我遵循了所有更新的答案,因为Rails 5改变了我在这里看到的chain_停止工作的方式

到目前为止,我可以防止销毁或更新我的主模型TimeWorked,但即使使用throw:abort ActiveRecord,它仍然会销毁与之关联的资源TimeWorkedEvent

如何防止此模型及其嵌套资源被破坏

模型时间工作/事件/联接表:

控制器:

class TimeWorkedController < ApplicationController
 def destroy
    @time_worked.destroy
  end
end

之所以发生这种情况,是因为before\u destroy在dependent:destroy回调之后运行。所以你可以这样做,在依赖之前调用它:销毁-

  before_destroy :check, prepend: true

  def check
    not_signed
    throw(:abort) if errors.present?
  end


正是我所需要的,非常感谢!这就是为什么我同时喜欢和讨厌rails,一个关键字和你所有的问题都会出现/消失。应该首先找到一些帮助文档。Rails official清楚地演示了用例以及在公认答案中共享的解决方案。请查看订购回拨部分。这样做也应该给你一个欣赏文档作者的机会!在被接受的答案和它的解释之前,我不知道它与回调顺序有关,而是与验证和嵌套资源相关的东西,我对此还是新手。谢谢你的资源
  before_destroy :check, prepend: true

  def check
    not_signed
    throw(:abort) if errors.present?
  end