lavezzi1
@lavezzi1

@User.last_seen_at лучший способ?

Здравствуйте!
Интересно узнать ваше мнение по поводу данного куска кода, а также узнать альтернативы решения данной задачи.

Здесь есть одна проблема, если перейти в профиль человека, который не логинился после добавления данной функции, выкидывает ошибку
undefined method `>' for nil:NilClass
Как это возможно решить?

application_controller.rb
before_action :set_last_seen_at, if: proc { user_signed_in? && (session[:last_seen_at] == nil || session[:last_seen_at] < 15.minutes.ago) }



	private
	def set_last_seen_at
	  current_user.update_attribute(:last_seen_at, Time.now)
	  session[:last_seen_at] = Time.now
	end


view
= time_ago_in_words(@user.last_seen_at)

В базе
add_column :users, :last_seen_at, :datetime
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 1
Jeiwan
@Jeiwan
time_ago_in_words принимает дату, а @user.last_seen_at возвращает nil. Нужно сделать что-то вроде этого:
= @user.last_seen_at ? time_ago_in_words(@user.last_seen_at) : "Давным-давно"

Или
= time_ago_in_words(@user.last_seen_at) if @user.last_seen_at


P.S.
(session[:last_seen_at] == nil || session[:last_seen_at] < 15.minutes.ago)
эту проверку лучше делать в методе set_last_seen_at — так код будет лучше читаться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы