Таким образом, в идеале вы должны сохранить отметку времени "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 в этой модели.