ruby-on-rails - Rails 递增登录计数器

标签 ruby-on-rails ruby-on-rails-4

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

class User < ActiveRecord::Base

before_save { self.sign_in_count = 1 }

end

这在我进入 rails 控制台时有效,我可以返回 1:
u = User.last
u.sign_in_count
=> 1

然后我在我的 SessionsHelper 中创建了一个方法:
def sign_in_count(user)
  user.sign_in_count += 1
end

然后我像这样称它为我的 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

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

最佳答案

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

def sign_in_count(user)
  user.increment!(:sign_in_count)
end
还有,请改before_save回调到 before_create打回来。我们只是初始化 sign_in_count仅在创建新用户时进行一次。
如果您想减少 sign_in_count , 请使用 decrement .

关于ruby-on-rails - Rails 递增登录计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074024/

相关文章:

ruby-on-rails - Ruby on Rails 2 表单样式 - 简单问题

mysql - 如何将数据从 ASCII (ISO/IEC 8859-1) 导入我的 Rails/PGSQL 数据库?

ruby-on-rails - Ruby on Rails 4 解析前 3 个 RSS 项

mysql - 使用 Rails 上的 created_at 数据对数组进行排序(使用 sort_by { |x| x.created_at } 它只是保持相同的方式

ruby-on-rails - 读取 xlsx/xls 文件 - Rails 4

ruby-on-rails - 取消选中复选框仅不适用于 rspec/capybara 测试

mysql - 在 Rails 环境中打开单独的 MySQL 连接是一个坏主意吗?

ruby-on-rails - rails 测试无法识别路径

android - 提交到 Rails 时 JSON 导致实体无法处理(错误 422)

ruby - 正则表达式匹配字符串开头的精确子字符串