我正在阅读另一个关于将自制分析添加到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
答案 0 :(得分:0)
这完全取决于您将来要使用的要求。如果您希望存储用户数据以用于将来的目的(如分析目的),则存储到db中,否则您可以将其保留在会话或缓存基础上。我认为有一个分析的目的,所以你做得对。