【问题标题】:Allow an action once per session每个会话允许一次操作
【发布时间】:2011-04-28 04:27:29
【问题描述】:

我有一个网站可以跟踪视频浏览量……每次调用控制器时。人们可以用一些沉重的 F5 来淹没他们自己的视频视图。

如何使视图计数或方法在每个会话中只运行一次?

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

【问题讨论】:

    标签: ruby-on-rails ruby session


    【解决方案1】:

    您可以在登录时创建会话变量,例如:

    session[:is_logged] = 1
    

    然后,每次你要增加计数器时,只需检查这个变量。

    【讨论】:

    • 回到这个,实际上必须分配一个数组才能让它工作,包含每个视频 ID。对于那些关心...
    【解决方案2】:

    单个会话变量不起作用,因为您有很多视频,并且您想为不同的视频分开计数。我认为更好的方法是将视图事件存储在数据库中。

    • 优点:您甚至可以允许操作一次 每个用户避免登录/注销
    • 缺点:users_videos 表很大

    【讨论】:

      【解决方案3】:

      嗯,最简单的方法是在会话本身中跟踪它:

      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
      

      【讨论】:

        猜你喜欢
        • 2015-03-12
        • 2019-10-19
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        • 1970-01-01
        • 2014-09-05
        相关资源
        最近更新 更多