before_save przy aktualizacji profilu

Dobry wieczór! :slight_smile: Mam problem odnośnie before_save, otóż mam akcję którą nazwałem sobie ‘password_update’, i tak też ustawiłem sobie w modelu;

before_save :encrypt_password, :only => [:password_update]

Wszystko pięknie - z tym, że przy modyfikacji profilu również się wywołuje encrypt_password (czyli za każdym razem koduje mi hasło na nowo). Domyślam się, że ‘:only’ działa tylko na podstawowe akcje (:new, :create, :update itd.). Chcę, żeby tylko w akcji zmiany hasła encrypyt_password się wykonywał. Jakieś pomysły? :slight_smile:

:only to parametr przekazywany do filtrów w kontrolerze, a nie do callbacków modelu, jak tutaj próbowałeś. Nie wiem, jak wygląda Twoja dokładna implementacja, ale może:

before_update :encrypt_pasword, :if => lambda { |p| p.password}

?

Nie, ale wywołałem sobie po prostu tą metodę w akcji kontrolera. Ale dziękuję za odpowiedź! :slight_smile:

Moim zdaniem, umieszczanie logiki związanej z szyfrowaniem hasła w kontrolerze (zamiast w modelu) to mało udany pomysł. Na Twoim miejscu trochę bym to przerobił, żeby wypchnąć to do modelu właśnie.

++

Masz pełną świadomość, że chałupniczo napisane uwierzytelnianie nie powinno się znaleźć na żadnym produkcyjnym serwerze?