ActiveRecord ma kilka różnych metod wywoływania zwrotnego używanych w celu uproszczenia logiki modelu. Na przykład metody after_find
i before_create
.Dlaczego wywołania zwrotne ActiveRecord wymagają, aby zmienne instancji lub metody instancji były poprzedzone słowem kluczowym self?
Rozważmy następujący przykład kodu:
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
Jeśli usunąć wszystkie self
prefiksy od zmiennych instancji lub metod instancji, te 2 Funkcje będą nazwie, ale to tak jakby oni są zmienne lokalne wewnątrz tych zwrotnego metody.
Instancja zmienna (card_status
), sposoby, przykładowo (save!
, is_used_up?
i is_expired?
) i asocjacji (user
) pracowała prawidłowo poza tymi 2 metody zwrotnych bez przedrostka self
.
Przykładowy kod w dokumentacji Railsów dla metod wywołania zwrotnego (metody instancji) wydaje się zawsze używać prefiksu self
, mimo że wywołuje on zmienne lub metody instancji, które normalnie są dostępne bez prefiksu self
.
Mam nadzieję, że ktoś, kto lepiej zrozumie wywołania zwrotne ActiveRecord, może pomóc rzucić światło na to zachowanie.
Cheers
Zobacz ten artykuł Thoughtbot dla wielu szczegółów: http://robots.thoughtbot.com/post/185504560/to-self-or-not-to -self –
inny artykuł, który wyjaśnia to http: //www.rubyfleebie. com/use-self-explicitly / –