Me gustaría destruir un modelo anidado si sus atributos están en blanco en el formulario para el modelo principal; sin embargo, parece que no se llama al ActiveRecord::Callbacks
si el modelo está en blanco.Destruir en el atributo anidado en blanco
class Artist < ActiveRecord::Base
using_access_control
attr_accessible :bio, :name, :tour_dates_attributes
has_many :tour_dates, :dependent => :destroy
accepts_nested_attributes_for :tour_dates, :reject_if => lambda { |a| a[:when].blank? || a[:where].blank? }, :allow_destroy => true
validates :bio, :name :presence => true
def to_param
name
end
end
y
class TourDate < ActiveRecord::Base
validates :address, :when, :where, :artist_id, :presence => true
attr_accessible :address, :artist_id, :when, :where
belongs_to :artist
before_save :destroy_if_blank
private
def destroy_if_blank
logger.info "destroy_if_blank called"
end
end
Tengo una forma de artista que utiliza fields_for
para mostrar los campos de fechas asociadas del artista, que trabaja para la edición y la adición de nuevas fechas, pero si simplemente en blanco fuera de una fecha de gira (para eliminarlo), nunca se llama al destroy_if_blank
. Es de suponer que la línea @artist.update_attributes(params[:artist])
del controlador Artist no considera una entidad en blanco que valga la pena actualizar.
¿Echo de menos algo? ¿Hay alguna forma de evitar esto?
¿Por qué 'tour_date.when.blank?' ¿dos veces? gracias –
@maxkaplan: Debería haber sido 'cuándo' y' dónde'. Lo arreglé en la respuesta. ¡Gracias! – Sunny