我正在阅读另一个关于向 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