Rails:dependent => destroy,想要调用另一个动作而不是destroy

ale*_*our 4 ruby-on-rails destroy

我有一个完美运行的has_many:through模型.

  has_many :varietals
  has_many :grapes, :through => :varietals, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)

我想调用另一个动作而不是:destroy.事实上,我不想取消项目或销毁它,我想将记录状态字段从1更新为0而不是销毁记录.

如何调用自定义方法而不是销毁?我想我可以在模型中做到这一点......谢谢.

这个方法放在哪里?在主模型或模型中,记录将被销毁?

编辑:

我很抱歉,但我认为我没有解释我的问题.我的问题不仅仅是在主模型被销毁之后的某些东西.我想在Varietal模型中自定义destroy动作,即使主记录没有被破坏.

就像是:

class Varietal < ActiveRecord::Base

    private
      def destroy
        self.update_attributes(:status => 0)
      end
end
Run Code Online (Sandbox Code Playgroud)

实际上这个动作没有被称为......

小智 9

您可以使用before_destroy将自定义逻辑放在那里.例如,

before_destroy :reset_status

def reset_status
  ...
end
Run Code Online (Sandbox Code Playgroud)

点击此处了解更多详情.


Sco*_*hea 3

has_many :dependent 仅限于几个选项。根据文档

\n\n
\n

:dependent 如果设置为 :destroy 所有关联的对象都会通过调用它们的 destroy 方法与该对象一起被销毁。如果设置为\n :delete_all 将删除所有关联的对象,而不调用其销毁方法。\n 如果设置为 :nullify,所有关联对象\xe2\x80\x99 外键将设置为 NULL,而不调用其保存回调。如果设置为\n :restrict,则此对象会引发 ActiveRecord::DeleteRestrictionError\n 异常,并且如果它具有任何关联对象,则无法删除。

\n\n

如果与 :through 选项一起使用,则连接模型上的关联必须是一belongs_to,并且被删除的记录是连接记录,而不是关联记录。

\n
\n\n

看起来您需要更改 destroy 方法来更新状态字段。

\n