En mi opinión, si llama a la función save
en una devolución de llamada after_save
, se bloqueará en una recursión a menos que ponga un guardia al principio. como esto
class User < AR::Base
after_save :change_url
def change_url
#Check some condition to skip saving
url = "www.johnseena.com"
save #<======= this save will fire the after_save again
end
end
Sin embargo, aparte de poner un guardia, se puede utilizar también update_column
def change_url
update_column(:url, "www.johnseena.com")
end
En este caso, no se disparará after_save
. Sin embargo, disparará after_update
. Así que si usted tiene cualquier operación de actualización en esa llamada en ese entonces usted está en la repetición de nuevo :)
¿Realmente está usando la variable de instancia '@ user' en la devolución de llamada' after_save'? – Samiron
Realmente tiene que trabajar para explicar lo que necesita un poco mejor y dar algunos ejemplos más de lo que ha intentado. – simonmorley