在我的应用程序中,我mark_for_destruction
用来根据条件删除嵌套记录。
我有一个Ticket
模型和一个Pick
模型:
class Ticket < ActiveRecord::Base
has_many :picks
accepts_nested_attributes_for :picks
attr_accessible :picks_attributes
before_save :mark_destroy_zero_weighted_picks
def mark_destroy_zero_weighted_picks
picks.each do |pick|
pick.mark_for_destruction if pick.weight.to_i == 0
end
end
end
class Pick < ActiveRecord::Base
belongs_to :ticket
attr_accessible :ticket_id
attr_accessible :weight
end
如果有一张带有 4 个选秀权的票与之关联,则有 weight 1,0,2,1
;然后在创建新的票证记录时,只有第一个选秀权被保存,加权选秀权之后的所有其他选秀0
权(这是真的)被删除。marked_for_destruction
如果我编辑记录但在创建新记录时不起作用,它可以正常工作。