有用户模型,当用户创建帐户时,带有确认链接的信件会发送到他的电子邮件地址。 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>
如您所见,确认为零,其他相关列也是如此。为什么呢?
答案 0 :(得分:1)
这不起作用,因为您正在为用户设置confirmed
属性,但您没有再次保存。
根据您的需要,您可以将回调更改为before_create
或保存用户:
def confirmation
...
self.save
end
跳这个有帮助!