我有一個基本的身份驗證系統,就像Michael Hartl的Ruby on Rails Tutorial一樣。基本上,記憶令牌存儲在cookie中。我從Railscast#124實施了Ryan Bate的Beta-Invitations,在那裏你可以發送數量有限的邀請。雖然這樣做,我碰到了問題,the current user got logged out after sending an invitation。這是由這個代碼在邀請函模型造成的:ActiveRecord方法遞減!更新其他屬性。這是爲什麼?
invitation.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
我發現了一個ugly workaround,但我很想知道真正的問題是什麼。由於我不知道從哪裏開始,我將向您展示來自用戶控制器的更新方法。還有什麼可能是相關的?
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
非常有見地,非常感謝! – 2012-07-06 10:34:39