Tengo envíos y facturas.Rieles 3. validación before_destroy para evitar la eliminación de registros principales
factura pertenece al embarque
embarque tiene una factura
Si el envío tiene una factura, a continuación, el envío no debe ser capaz de ser eliminado. Necesito configurar esto en los modelos porque estoy usando ActiveAdmin.
Así que hice esto en shipment.rb
has_one :invoice
before_destroy :check_for_invoice
private
def check_for_invoice
unless invoice.nil?
self.errors[:base] << "Cannot delete shipment while its invoice exists."
end
end
Pero acabo de recibir un mensaje de color amarillo que dice "El envío no se puede borrar" pero de hecho fue eliminado.
¿Cómo puedo evitar que se elimine el envío?
¡Ah, sí! Olvidé devolver falso. También publiqué esta parte del código incorrecta 'if invoice.nil?', Se supone que es 'a menos que invoice.nil?' En su lugar. – leonel
Tenía curiosidad sobre la lógica, pero pensé que podría ser algo raro que estuvieras haciendo. Actualizaré mi respuesta para que coincida por el bien de la posteridad. –
Compruebe [esta respuesta a una pregunta similar] (http://stackoverflow.com/a/10257516/703233) para obtener una mejor forma de hacerlo. – nitsas