当我删除嵌套对象时,assign_attributes似乎无法识别。
我有一个名为Order的模型:
class Order < ActiveRecord::Base
has_many :deliveries, :dependent => :destroy
accepts_nested_attributes_for :deliveries, :allow_destroy => true
end
假设我创建了一个包含两个交货的订单。然后我打开“编辑顺序”表单(这是一个嵌套的表单,您可以看到两个嵌套的交付),然后删除其中一个交付,即“_destroy”属性设置为true。
然后,如果我这样做:
@order = Order.find_by_id(params[:id])
@order.assign_attributes(order_params)
logger.debug "@order.deliveries: #{@order.deliveries.inspect}"
我可以看到两个交付仍然存在于订单下。
然而,如果我这样做
@order = Order.find_by_id(params[:id])
@order.update_attributes!(order_params)
logger.debug "@order.deliveries: #{@order.deliveries.inspect}"
其中一项交付按预期删除。
assign_attributes的预期行为是什么?理想情况下,我希望它删除已删除的传递,但不保存生成的对象/链接到数据库。
答案 0 :(得分:0)
accepts_nested_attributes_for
通过回调处理删除。在您保存父母(update_attributes
之后)之前,孩子的记录不会消失。
如果您浏览accepts_nested_attributes_for
的代码,可以找到它存储要删除的记录列表的位置。