我想添加一列到users
,名爲points
,並在不同的時間更新它。但是,當我更改用戶列的值時,用戶將被註銷,因爲用戶的記憶令牌已更改,並且與本地存儲的令牌不匹配。如何在不簽署用戶的情況下編輯用戶的值?
我可以在每次更新控制器中的列時手動登錄用戶,但是如果可能的話我想避免這種情況(並且能夠從模型更新)。有沒有辦法讓我更新用戶而無需登錄?
我想添加一列到users
,名爲points
,並在不同的時間更新它。但是,當我更改用戶列的值時,用戶將被註銷,因爲用戶的記憶令牌已更改,並且與本地存儲的令牌不匹配。如何在不簽署用戶的情況下編輯用戶的值?
我可以在每次更新控制器中的列時手動登錄用戶,但是如果可能的話我想避免這種情況(並且能夠從模型更新)。有沒有辦法讓我更新用戶而無需登錄?
我意識到問題是一個新的標記是每當用戶被保存時用before_save回調生成的。所以有兩種方法可以解決此問題:
update_column
更新列而不調用before_save回調。我不知道你使用的是什麼認證系統,但只是改變了架構或更新犯規要求用戶在重新登錄最常見的軌道權威性系統用戶的屬性(設計,Authlogic,等...)
最容易的事情是將@user.id
存儲在您的會話變量中,而不是整個User
對象。採用這種方法,即使在編輯之後,您仍會保留一個可供您參考的穩定的id
字段。
這有幾個好處:
User
對象來回無緣無故。將它連接到您的應用程序控制器很容易,因此透明使用id
而不是真正的用戶對象。
class ApplicationController < ActionController::Base
def current_user
User.find(session[:user_id])
end
....
當然,你需要添加錯誤處理一個不登錄的用戶,但一般的方法將讓你的代碼乾淨,和抽象遠離用戶標識符的想法用戶的數據內容。
這不是一個寶石。身份驗證與Railscasts和Railstutorial使用的身份驗證類似。 http://railscasts.com/episodes/250-authentication-from-scratch http://ruby.railstutorial.org/chapters/sign-in-sign-out – Ari