2016-03-18 3 views
1

В моей модели пользователя, у меня есть столбец «sign_in_count», который я изначально установлен на 1, когда пользователь создан: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 всегда 1. Любая идея относительно того, что я делаю неправильно здесь?

+0

Вы проверили 'user.sign_in_count' или' sign_in_count (user) '? –

+0

Метод '.increment' от Thieu выглядит потрясающе. Кроме того, может ли ваша проблема быть в том, что вы в настоящее время не называете '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

Смежные вопросы