ActiveRecord tiene unos pocos métodos de devolución de llamada diferentes utilizados para simplificar la lógica del modelo. Por ejemplo, los métodos after_find
y before_create
.¿Por qué las devoluciones de llamada de ActiveRecord requieren variables de instancia o métodos de instancia con el prefijo selfword?
Considere este ejemplo de código:
class ExternalPrintingCard < ActiveRecord::Base
belongs_to :user
belongs_to :ph_user
after_create :change_pin
def change_pin
self.user.randomize_printer_pin
end
def after_find
return if self.card_status == false
self.card_status = false if self.is_used_up?
self.card_status = false if self.is_expired?
self.save!
end
end
Si quito todos los self
prefijos de las variables de instancia o métodos de instancia, serán llamados estos 2 devoluciones de llamada, pero es como si fueran variables locales dentro de estas devolución de llamada métodos.
Esta variable de instancia (card_status
), métodos de instancia (save!
, is_used_up?
y is_expired?
) y asociación (user
) funcionaba bien fuera de estos 2 métodos de devolución de llamada sin el self
prefijo. El código de muestra en la documentación de Rails para métodos de devolución de llamada (métodos de instancia), parece usar siempre el prefijo self
aunque está llamando a variables o métodos de instancia, que por derecho son accesibles normalmente sin el prefijo self
.
Espero que alguien con una mejor comprensión de las devoluciones de llamada de ActiveRecord pueda ayudar a arrojar luz sobre este comportamiento.
Saludos
Consulte este artículo de Thoughtbot para obtener más información: http://robots.thoughtbot.com/post/185504560/to-self-or-not-to-self –
Otro artículo que lo explica http: //www.rubyfleebie. com/use-self-explicitly / –