2016-03-18 33 views
1

在我的用戶模型中,我已經是創建用戶時,我最初設置爲1「sign_in_count」欄:Rails的增量登錄計數器

class User < ActiveRecord::Base 

before_save { self.sign_in_count = 1 } 

end 

當我去鐵軌控制檯可正常工作,我可以拿回1:

u = User.last 
u.sign_in_count 
=> 1 

然後,我創造了我的SessionsHelper的方法:

def sign_in_count(user) 
    user.sign_in_count += 1 
end 

然後,我把它叫做我的SessionsC像這樣的控制器:

def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
    log_in user 
    sign_in_count(user) 
. 
. 
. 
end 

但是,sign_in_count永遠不會增加。我登錄得很好。我沒有任何錯誤或任何事情。我檢查控制檯和sign_in_count始終是1.任何想法,我在這裏做錯了嗎?

+0

您檢查過'user.sign_in_count'或'sign_in_count(user)'嗎? –

+0

Thieu的'.increment'方法看起來很棒。另外,你的問題可能是你目前不叫'user.save'? – jvillian

+0

'user.sign_in_count + = 1'不會保存它。 – ShallmentMo

回答

3

使用increment方法(detail)代替,就像這樣:

def sign_in_count(user) 
    user.increment!(:sign_in_count) 
end 

而且,請更改before_save回調before_create回調。新用戶創建時,我們只初始化一次sign_in_count

如果你想減少sign_in_count,請使用decrement

+0

工作完美,謝謝Thieu Nguyen! – Banner