回调后不起作用

时间:2013-05-22 17:29:37

标签: ruby-on-rails

有用户模型,当用户创建帐户时,带有确认链接的信件会发送到他的电子邮件地址。 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: "somddething@mail.com", 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>

如您所见,确认为零,其他相关列也是如此。为什么呢?

1 个答案:

答案 0 :(得分:1)

这不起作用,因为您正在为用户设置confirmed属性,但您没有再次保存。

根据您的需要,您可以将回调更改为before_create或保存用户:

def confirmation
  ...
  self.save
end

跳这个有帮助!