在用户注册/使用Rails + Devise登录时执行JS代码

时间:2011-10-15 17:10:29

标签: javascript ruby-on-rails devise analytics kissmetrics

我正在查看Kissmetrics(分析应用程序)JS API文档,他们有一个“识别”方法,可让您告诉Kissmetrics有关用户的信息。以下是他们的文档所说的内容:

  

我们建议您在两种情况下呼叫身份识别:

     

用户成功注册时   当用户通过cookie或登录页面成功登录时

实现这一目标的最佳方法是什么?如何检测用户刚刚注册或登录?

1 个答案:

答案 0 :(得分:8)

让我们把问题分成两部分:注册并登录。

您可以检测新用户何时在您的应用中注册,只需在after_create模型中添加User挂钩。像

这样的东西
class User < ActiveRecord::Base
  after_create :register_hook

  def register_hook
    # your code here
  end
end

检测用户登录的时间有点脏。设计时,设计会修改用户的user.current_sign_in_at属性,因此您可以在用户模型中添加before_save挂钩,并检查current_sign_in_at属性是否已更改。它应该是这样的:

class User < ActiveRecord::Base
  before_save :login_hook, :if => current_sign_in_at_changed?

  def login_hook
    # your code here
  end
end

一旦你有正确的回调来检测登录/注册,你可以创建一个带有信息的cookie并从javascript中读取它或为User模型编写一个帮助方法并写下这样的东西在你的布局中:

<% if current_user.just_signed_in %>
  <script type="text/javascript">
    // Your sign in stats code here
  </script>
<% end %>

<% if current_user.just_signed_up %>
  <script type="text/javascript">
    // Your sign up stats code here
  </script>
<% end %>

按照这种方式,完整的模型将是:

class User < ActiveRecord::Base
  after_create :register_hook
  before_save :login_hook, :if => current_sign_in_at_changed?

  attr_accessor :just_singed_up, :just_signed_in

  def register_hook
    @just_signed_up = true
  end

  def login_hook
    @just_signed_in = true
  end
end