0

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

我正在向我网站上的用户配置文件添加分析。每次有人访问个人资料时,我都会检查访问者是否已注册以及访问者是否正在查看他自己的个人资料(无需记录),然后我会保存 ip、查看者的 id(如果已注册)和每次查看用户的个人资料时,查看者的角色(我的应用程序用户 rolify)到数据库。

我想不出一种直接的方法来避免每次查看配置文件时都保存到数据库中。

你能解释一下我该怎么做吗?

下面的(诚然丑陋的)代码是我的 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 
4

1 回答 1

0

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

于 2013-05-03T06:03:52.010 回答