Producent oprogramowania 

producent oprogramowania internetowego 

callbacki przed save

2008-03-10
class User
 def before_create
  self.active = true
  self.blacklisted = false
 end
end

Z pozoru nic. Ale spróbujmy teraz stworzyć użytkownika - za każdym razem dostaniemy ActiveRecord::RecordNotSaved.|Dlaczego tak się dzieje? Po prostu wartością zwracaną przez metodę (jeśli nie jest jawnie wywoływany return) jest wartość ostatniego wyrażenia - w tym przypadku false. A ponieważ callback before_create oprócz możliwości inicjalizacji służy też jako filtr, więc wartość false oznacza, iż obiekt nie zostanie zapisany.

Jak w łatwy sposób zmienić omawianą metodę, żeby zadziałała poprawnie? Wystarczy zamienić linie:

class User
 def before_create
  self.active = true
  self.blacklisted = false
 end
end

A żeby nie mieć problemów w przyszłości warto wyrobić sobie nawyk dodawania