2013-05-22 6 views
0

Существует модель пользователя, и когда пользователь создает учетную запись, письмо со ссылкой для подтверждения отправляется на адрес электронной почты. after_callback устанавливает номер confirmed пользователя на false. (я не уверен, что если более чем один обратных вызовов одного типа возможно, есть два после обратных вызовов)После того, как обратный вызов не работает

User.rb:

after_create :confirmation 
after_create :add_user_profile 

...

def confirmation 
    if self.guest 
     self.confirmed=true 
    elsif self.authentication 
     self.confirmed=true 
    else 
     self.confirmed=false 
     begin 
     confirmation_token = SecureRandom.urlsafe_base64 
     end while User.exists?(:confirmation_token => confirmation_token) 
     self.confirmation_token=confirmation_token 
     self.confirmation_link_sent_at=Time.now.utc 
     UserMailer.send_confirmation_link(self).deliver 
     User.delay.delete_unconfirmed(self) 
    end 
    end 

Но когда я вывожу последнего пользователя с консоли:

>> User.last 
    User Load (1.0ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 
#<User id: 21, email: "[email protected]", password_digest: "$2a$10$LMtsumUaS5MaiRhz3.mZ2em7Fbt3.66pbpe4863zj3b0...", created_at: "2013-05-22 17:17:18", updated_at: "2013-05-22 17:17:18", guest: false, auth_token: "lbIJftEqgwyXYymjEVdhCQ", password_reset_token: nil, password_link_sent_at: nil, confirmed: nil, confirmation_token: nil, confirmation_link_sent_at: nil> 

Как вы можете видеть, подтверждено, что nil , а также другие связанные столбцы. Зачем?

ответ

1

Это не работает, потому что вы устанавливаете атрибут confirmed пользователям, но не сохраняете его снова.

В зависимости от ваших потребностей, вы можете изменить функцию обратного вызова для before_create или сохранения пользователя:

def confirmation 
    ... 
    self.save 
end 

Hop это помогает!

+0

спасибо! Всегда забывайте, что мне нужно вызвать save после таких вещей. –

Смежные вопросы