查看轨道中的数字

时间:2011-10-17 12:56:59

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

如果我有Article模型和User Model.User :has_many文章。

文章模型有一个viewed cloumn,用于记录查看的时间。

我希望以这种方式实施:用户查看文章后@article.viewed + 1.当用户在一天内再次查看同一篇文章时,@article.viewed将不会再次+1每天一个用户不能+2)。如何实施?

1 个答案:

答案 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列。