Rails 递增登录计数器

Ban*_*ner 3 ruby-on-rails ruby-on-rails-4

在我的用户模型中,我有一个“sign_in_count”列,在创建用户时我最初将其设置为 1:

class User < ActiveRecord::Base

before_save { self.sign_in_count = 1 }

end
Run Code Online (Sandbox Code Playgroud)

这在我进入 rails 控制台时有效,我可以返回 1:

u = User.last
u.sign_in_count
=> 1
Run Code Online (Sandbox Code Playgroud)

然后我在我的 SessionsHelper 中创建了一个方法:

def sign_in_count(user)
  user.sign_in_count += 1
end
Run Code Online (Sandbox Code Playgroud)

然后我像这样称它为我的 SessionsController:

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
Run Code Online (Sandbox Code Playgroud)

但是 sign_in_count 似乎永远不会增加。我登录完全正常。我没有得到任何错误或任何东西。我检查了控制台,sign_in_count 总是 1。知道我在这里做错了什么吗?

Thi*_*yen 6

使用increment方法 ( detail ) 而不是,像这样:

def sign_in_count(user)
  user.increment!(:sign_in_count)
end
Run Code Online (Sandbox Code Playgroud)

并且,请将before_save回调更改为before_create回调。我们只sign_in_count在创建新用户时初始化一次。

如果您想减少sign_in_count,请使用decrement