我有一个基本的身份验证系统,就像 Michael Hartl 的Ruby on Rails 教程中的一样。基本上,记住令牌存储在 cookie 中。我从 Railscast #124 实现了 Ryan Bate 的Beta-Invitations,您可以在其中发送有限数量的邀请。这样做时,我遇到了当前用户在发送邀请后退出的问题。这是由邀请模型中的代码引起的:
邀请.rb
belongs_to :sender, :class_name => 'User'
[...]
before_create :decrement_sender_count, :if => :sender
[...]
def decrement_sender_count
sender.decrement! :invitation_limit
end
在日志中我看到了 sender.decrement!不仅更新了invitation_limit,还更新了remember_token:
UPDATE "users" SET "invitation_limit" = 9982, "remember_token" = 'PYEWo_om0iaMjwltU4iRBg', "updated_at" = '2012-07-06 09:57:43.354922' WHERE "users"."id" = 1
我发现了一个丑陋的解决方法,但我很想知道问题到底是什么。由于我不知道从哪里开始,我将向您展示来自用户控制器的更新方法。还有什么相关的?
users_controller.rb
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:success] = t('success.profile_save')
sign_in @user
redirect_to @user
else
flash.now[:error] = t('error.profile_save')
render 'edit'
end
end