Rails: как установить дату последнего входа в систему - PullRequest
3 голосов
/ 19 сентября 2011

У меня есть столбец даты и времени с именем lastlogin в моей таблице пользователей. Как я могу установить (и обновить) эти данные, когда пользователь вошел в систему? В моем контроллере сеансов я что-то вроде этого:

def create
  user = User.find_by_email(params[:email])
  if user && user.authenticate(params[:password])
    session[:user_id] = user.id
    user.lastlogin = Time.now
    redirect_to root_url
  else
    render "new"
  end
end

user.lastlogin = Time.now не работает: (

Ответы [ 5 ]

4 голосов
/ 19 сентября 2011
user.update_attribute(:lastlogin, Time.now)
2 голосов
/ 19 сентября 2011

Возможно user.touch :lastlogin ( сенсорный )

1 голос
/ 16 июля 2015
user.update_attribute(:lastlogin, Time.now) 

будет работать хорошо.

В зависимости от того, будет ли дата использоваться пользователем или вами, я добавлю, что одним из лучших способов будет использование Time.zone.now вместо Time.now (один дает дату в часовом поясе, указанном config.time_zone в application.rb , другой дает местное время пользователя).

Источник: http://rails -bestpractices.com/posts/2014/10/22/use-time-zone-now-instead-of-time-now/

0 голосов
/ 25 января 2018

Собирая это вместе, я делаю следующее.

  1. У пользователя есть поле last_seen_on (я использую Date вместо DateTime)
  2. Создать метод для обновления last_seen_on
  3. Позвоните, когда войдете в систему

Мой метод обновления выглядит следующим образом

  def update_last_seen_on
    if self.last_seen_on != Date.today
      self.update_column(:last_seen_on,Date.today)
    end
  end

Это гарантирует, что

  • база данных вызывается только при изменении
  • на пользовательской модели не выполняются обратные вызовы
  • обновляется при не изменяется

Если вы используете Devise, вы можете легко вызвать это, добавив следующее в инициализатор Devise

#config/initializers/devise.rb
Warden::Manager.after_set_user do |user,auth,opts|
  user.update_last_seen_on
end
0 голосов
/ 19 сентября 2011

Это не работает, потому что вы должны сохранить пользователя, чтобы сделать его постоянным.Просто добавьте user.save перед user.lastlogin = Time.now.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...