跟踪数据以进行分析,而无需每次访问都访问数据库

时间:2013-05-02 17:16:02

标签: ruby-on-rails

我正在阅读另一个关于将自制分析添加到Rails应用程序的问题/答案。在答案中,有人指出你不应该为每个视图点击数据库,但他们没有详细说明。

我正在为我网站上的用户个人资料添加分析功能。每次有人访问个人资料时,我都会检查访问者是否已注册以及访问者是否正在查看自己的个人资料(无需记录该个人资料),然后我将保存ip,观看者的ID(如果已注册)和每次查看用户的个人资料时,查看者的角色(我的应用程序用户都会滚动)到数据库。

我无法想到每次查看配置文件时都避免直接保存到数据库的方法。

你能解释我怎么做吗?

以下(不可否认的是丑陋的)代码是我目前在我的users_controller.rb的show动作中实现的

      @user = User.find(params[:id]) 
      ip = request.ip

        if session['warden.user.user.key'][1]  #checks if visitor is registered

          visitor_id = session['warden.user.user.key'][1]  #gets the user id of the visitor 
          visitor_id = visitor_id[0]
            if @user.id != visitor_id  #don't record visits to own profile
              visitor = User.find_by_id(visitor_id)
              if visitor.has_role?(:somerole)
                visitor_role = 'lawyer'
              elsif visitor.has_role?(:someotherrole)
                visitor_role = 'student'
              elsif visitor.has_role?(:admin)
                visitor_role = 'admin'
              else
                visitor_role = 'user'
              end 
            else
                puts 'visiting own profile'
            end       

         else
          visitor_id = nil  #unregistered visitor
          visitor_role = nil  #unregistered visitor
        end
       if @user.id != visitor_id  #don't save visits to own profile 
        Profileview.create!({:viewer_role => visitor_role, :viewer_id => visitor_id, :ip => ip, :user_id => @user.id}) 
      end 

1 个答案:

答案 0 :(得分:0)

这完全取决于您将来要使用的要求。如果您希望存储用户数据以用于将来的目的(如分析目的),则存储到db中,否则您可以将其保留在会话或缓存基础上。我认为有一个分析的目的,所以你做得对。