Rails 4.2
我有一个父类,它接受其子节点的嵌套属性。
class Parent < ActiveRecord::Base
has_many :kids
accepts_nested_attributes_for :kids, allow_destroy: true
end
class Kid < ActiveRecord::Base
belongs_to :parent
def destroy
if some_count > 0
self.hidden = true
else
self.destroy
end
end
end
我有时想在孩子身上设置隐藏标志,而不是删除它。我是通过accepts_nested_attributes_for
这样做的。我需要在服务器端设置此决定,我不能让用户决定是销毁还是隐藏。
但不要摧毁加注ActiveRecord::RecordNotDestroyed - Failed to destroy the record:
这样做的正确方法是什么?
答案 0 :(得分:1)
抛出错误是因为你进入了无限循环(你在destroy
方法中调用了destroy
方法)。请改用super。您还需要将隐藏的列更改保存到数据库。在这种情况下,使用update_column
应该是安全的(没有验证,也没有触发回调,没有其他列保存到数据库中)
class Kid < ActiveRecord::Base
belongs_to :parent
def destroy
if some_count > 0
update_column(:hidden, true)
else
super
end
end
end
要回答其他问题,您需要解释some_count是什么。 :)