如何在rails控制器中使用Google Analytics自定义事件?

Mat*_*man 9 javascript google-analytics ruby-on-rails

我想要做的是在我的控制器中使用谷歌分析的自定义事件跟踪,逻辑完成.我不太确定如何将javascript代码放入我的控制器中,或者根本不可能.我如何在我的控制器中放置这样的东西:

_trackEvent(category, action, opt_label, opt_value, opt_noninteraction)
Run Code Online (Sandbox Code Playgroud)

要么

_gaq.push(['_trackEvent', 'Videos', 'Play', 'Gone With the Wind']);
Run Code Online (Sandbox Code Playgroud)

谢谢!我应该使用哪一个?编辑:

以下是我根据建议进行设置的方法:

跟踪代码部分:

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-ACCOUNT']);
  _gaq.push(['_setDomainName', 'sitename.com']);
  _gaq.push(['_trackPageview']);
  <%= render "layouts/ga_events" %>

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
Run Code Online (Sandbox Code Playgroud)

_ga_events.html.erb(我在"value"参数中添加了)

<% unless session[:events].nil? %>
  <% session[:events].each do |event|%>
     _gaq.push(['_trackEvent', '<%= event[:category]%>', '<%= event[:action]%>', '<%= event[:label]%>', '<%= event[:value]%>']);
  <% end %>
<% end %>

<% session[:events] = Array.new %>
Run Code Online (Sandbox Code Playgroud)

应用程序控制器(添加"值参数")

  protected
    # GA event logger
    def log_event(category, action, label = nil, value = nil)
      session[:events] ||= Array.new
      session[:events] << {:category => category, :action => action, :label => label, :value => value}
    end
Run Code Online (Sandbox Code Playgroud)

在我的任务控制器中测试它:

def create
    @task = @user.tasks.build(params[:task])
    @task.author = current_user unless @user == current_user

    if @task.save
        log_event("Tasks", "Created", current_user.email, "123")
        redirect_back tasks_path, :notice => t('tasks.created')
    else
        redirect_back tasks_path, :alert => @task.errors.full_messages
    end
end
Run Code Online (Sandbox Code Playgroud)

编辑:这里我的GA输出代码,看起来一切都是正确的:

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA_CODE']);
  _gaq.push(['_setDomainName', 'SUBDOMAIN']);
  _gaq.push(['_trackPageview']);
       _gaq.push(['_trackEvent', 'Priority', 'Created (day)', 'Label info', '']);



  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
Run Code Online (Sandbox Code Playgroud)

cai*_*nne 19

这是我如何做到的,它与RoR的实现方式非常相似flash.从本质上讲,在服务器端,您可以存储最终要通过Javascript推送到GA的事件.最终呈现页面时,您将呈现Javascript以推送事件,并重置您的商店.

所以...

# application_controller.rb
protected
def log_event(category, action, label)
    session[:events] ||= Array.new
    session[:events] << {:category => category, :action => action, :label => label}
end
Run Code Online (Sandbox Code Playgroud)

..根据您的喜好,从您的个人控制器方法中调用该方法.

# application.html.erb
<head>
... other stuff...
<!-- Google Analytics -->
<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', '<%= CONFIG['ga_account_id'] %>']);
    _gaq.push(['_trackPageview']);
    <%= render "layouts/ga_events" %>
</script>
Run Code Online (Sandbox Code Playgroud)

..和那个小部分引用的是:

# _ga_events.html.erb
<% unless session[:events].nil? %>
  <% session[:events].each do |event|%>
     _gaq.push(['_trackEvent', '<%= event[:category]%>', '<%= event[:action]%>', '<%= event[:label]%>']);
  <% end %>
<% end %>

<% session[:events] = Array.new %>
Run Code Online (Sandbox Code Playgroud)