количество просмотров в рельсах - PullRequest
0 голосов
/ 17 октября 2011

если у меня есть Article Модель и User Model.User :has_many Статьи.

Article Model имеет viewed cloumn, который записывает просмотренные времена.

Я хочу реализовать это следующим образом: как только пользователь просмотрел статью, @article.viewed + 1. Когда пользователь снова просмотрел ту же статью через один день, @article.viewed больше не будет +1 (не может + 2 на одного пользователя в день). Как реализовать?

1 Ответ

0 голосов
/ 17 октября 2011

Таким образом, в идеале вы должны сохранить отметку времени "last_viewed" для статьи.

Статья также принадлежит Пользователю?Вы только учитываете количество раз, когда статья открывается ее владельцем?или Вы хотите вести подсчет количества раз, когда какой-либо пользователь просматривает какую-либо статью один раз в день?

article.rb

def view(date = Date.today)
  tap self do |me|
    if self.last_viewed.to_date != date
      self.last_viewed = date
      self.viewed += 1
      self.save
    end
  end
end

articles_controller.rb

def show
  @article = Article.find(params[:id]).try(:view) 
  # Or if this is what you prefer 
  @article = current_user.articles.find(params[:id]).try(:view)
  ...
end

В идеале вы НЕ обновляете БД при вызове GET (как в представлении статьи выше), но вВ вашем случае это классическое действие get, а сохранение количества просмотров является дополнительным побочным эффектом.Найдите в своем сердце все в порядке :) Сохраняйте функциональность представления в модели статьи и определенно сохраняйте поле last_viewed в модели статьи.

Если, тем не менее, вам нужно следить за многими пользователями и многими статьямиВам, вероятно, понадобятся отношения has_many через модель Viewership, которая принадлежит столбцам user, article, view_count, last_viewed в этой модели.

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