Разрешить действие один раз за сеанс - PullRequest
3 голосов
/ 24 апреля 2011

У меня есть сайт, который отслеживает просмотры видео ... каждый раз, когда вызывается контроллер.Можно залить свои собственные просмотры видео с помощью какого-нибудь тяжелого F5ing.

Как сделать так, чтобы представление считалось или метод запускался только один раз за сеанс?

def show
  new_views = @video.views + 1
  @video.update_attributes(:views => new_views)
end

Ответы [ 3 ]

2 голосов
/ 24 апреля 2011

Вы можете создать переменную сеанса, вероятно, при входе в систему, например:

session[:is_logged] = 1

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

2 голосов
/ 24 апреля 2011

Одна переменная сеанса не работает, потому что у вас много видео, и вы хотите разделить счетчики для разных видео. Я думаю, что лучший способ хранить события просмотра в БД.

  • плюсы: вы даже можете разрешить действие один раз на пользователя, избегая входа / выхода
  • минусов: огромный размер таблицы users_videos
0 голосов
/ 24 апреля 2011

Ну, самый простой способ - отследить его в самой сессии:

def show
  if session[:has_counted_view] == nil
    new_views = @video.views + 1
    @video.update_attributes(:views => new_views)
    session[:has_counted_view] = true
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...