2015-02-12 2 views
0

assign_attributes, похоже, не распознает, когда я удаляю вложенные объекты.Поведение assign_attributes с вложенными формами

У меня есть модель под названием Order:

class Order < ActiveRecord::Base 

    has_many :deliveries, :dependent => :destroy    
    accepts_nested_attributes_for :deliveries, :allow_destroy => true 

end 

Say создать заказ с двумя поставками. Затем я открываю форму «порядок редактирования» (которая представляет собой вложенную форму, где вы можете видеть две вложенные поставки), а затем удаляйте одну из поставок, то есть для атрибута «_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, вы можете найти, где он хранит список записей, которые нужно удалить.

Смежные вопросы