ActiveRecord ha alcuni metodi di callback diversi utilizzati per semplificare la logica del modello. Ad esempio i metodi after_find
e before_create
.Perché i callback di ActiveRecord richiedono che le variabili di istanza oi metodi di istanza siano preceduti da una parola chiave self?
Considerate questo esempio di codice:
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
Se rimuovo tutti i self
prefissi dalle variabili di istanza o metodi di istanza, saranno chiamati questi 2 callback, ma è come se fossero variabili locali all'interno di questi callback metodi.
Questa variabile istanza (card_status
), metodi di istanza (save!
, is_used_up?
e is_expired?
) e associazione (user
) funzionava bene fuori di questi 2 metodi di callback senza il prefisso self
.
Il codice di esempio nella documentazione delle guide per i metodi di callback (metodi di istanza), sembra di utilizzare sempre il prefisso self
anche se sta chiamando variabili di istanza o metodi, che per diritto essi sono accessibili senza il prefisso di self
normalmente.
Spero che qualcuno con una migliore comprensione dei callback di ActiveRecord possa aiutare a far luce su questo comportamento.
Acclamazioni
Vedere questo articolo Thoughtbot per molti dettagli: http://robots.thoughtbot.com/post/185504560/to-self-or-not-to-self –
un altro articolo che lo spiega http: //www.rubyfleebie. com/uso-auto-esplicito / –