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)
点击此处了解更多详情.
has_many :dependent 仅限于几个选项。根据文档:
\n\n\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
看起来您需要更改 destroy 方法来更新状态字段。
\n| 归档时间: |
|
| 查看次数: |
5901 次 |
| 最近记录: |