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