如果我有Article
模型和User
Model.User :has_many
文章。
文章模型有一个viewed
cloumn,用于记录查看的时间。
我希望以这种方式实施:用户查看文章后@article.viewed
+ 1.当用户在一天内再次查看同一篇文章时,@article.viewed
将不会再次+1每天一个用户不能+2)。如何实施?
答案 0 :(得分:0)
因此,理想情况下,您应该在文章中保留“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字段。
但是,如果您需要在许多用户和许多文章之间保持标签,您可能需要与“Viewership”模型的has_many thru关系,该模型属于该模型中的user,article,view_count,last_viewed列。