De nuevo, como antes, las adiciones al ProductsController están sólo en el método de los parámetos de productos, que ahora debería incluir también los atributos_variantes.
1234567defproduct_params params.require(:product).permit(:name,:price, image_attributes:[:id,:url,:alt,:caption], variant_attributes:[:id,:name,:price,:_destroy])end
rubí
El modelo de producto sólo tiene la siguiente adición para permitir la asociación de atributos anidados para las variantes:
1acepta los atributos anidados para las variantes, rechaza si::todo en blanco, permite destruir:true
rubí
Fíjate en la opción reject_if :all_blank. Significa que cualquier registro en el que los atributos estén todos en blanco (excluyendo el valor de _destroy) será rechazado. reject_if también soporta pasarle un Proc, que puede ser usado para alguna validación adicional, y también comprueba si se rechaza/incluye la asociación.
Hay otras dos opciones útiles. La primera es la opción del límite, que especifica el número máximo de registros que se procesarán. La segunda opción es update_only que se aplica a las asociaciones uno a uno y tiene un comportamiento bastante interesante. Si se establece en true, sólo actualizará los atributos del registro asociado. Si se establece a false al cambiar, no tocará el registro antiguo pero creará uno nuevo con los nuevos atributos. Por defecto es false y creará un nuevo registro a menos que el registro incluya un atributo id, que es exactamente la razón por la que incluimos el atributo id en los parámetos_de_producto para la asociación de imágenes uno a uno. Una solución alternativa habría sido definir los atributos anidados de esta manera:
1acepta los atributos anidados para :image, update_only:true
rubí
Puedes leer más sobre los Atributos Anidados en la documentación de Ruby on Rails donde se demuestra y documenta cada una de las opciones de configuración.