2015-02-12 74 views
0

assign_attributes似乎無法識別何時刪除嵌套對象。具有嵌套窗體的assign_attributes行爲

我有一個名爲訂貨型號:

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

accepts_nested_attributes_for通過回調處理刪除操作。孩子記錄不會消失,直到你保存父母(update_attributes確實)。

如果您深入瞭解accepts_nested_attributes_for的代碼,您可以找到它存儲要刪除的記錄列表的位置。