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。知道我在这里做错了什么吗?
使用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。