Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在rails控制器中使用Google Analytics自定义事件?_Javascript_Ruby On Rails_Google Analytics - Fatal编程技术网

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

Javascript 如何在rails控制器中使用Google Analytics自定义事件?,javascript,ruby-on-rails,google-analytics,Javascript,Ruby On Rails,Google Analytics,我想做的是在我的控制器中使用GoogleAnalytic的自定义事件跟踪,逻辑在控制器中完成。我不太确定如何将javascript代码放入我的控制器中,或者是否可能。我将如何在控制器中放置类似的东西: _trackEvent(category, action, opt_label, opt_value, opt_noninteraction) def create @task = @user.tasks.build(params[:task]) @task.author = c

我想做的是在我的控制器中使用GoogleAnalytic的自定义事件跟踪,逻辑在控制器中完成。我不太确定如何将javascript代码放入我的控制器中,或者是否可能。我将如何在控制器中放置类似的东西:

_trackEvent(category, action, opt_label, opt_value, opt_noninteraction)
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

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

以下是我如何根据建议进行设置的:

跟踪代码部分:

<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>
编辑:这里是我的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>

var _gaq=_gaq | |[];
_gaq.push([''设置帐户',''UA_代码']);
_gaq.push(['''u setDomainName','SUBDOMAIN']);
_gaq.push([''u trackPageview']);
_gaq.push([“跟踪事件”、“优先级”、“已创建(天)”、“标签信息”和“);
(功能(){
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);
})();

我是这样做的,这与RoR实现flash的方式非常相似。本质上,在服务器端,您存储最终希望通过Javascript推送到GA的事件。最终呈现页面时,您可以呈现Javascript以推送事件,并重置存储

所以

#应用程序_controller.rb
受保护的
def日志事件(类别、操作、标签)
会话[:事件]| |=Array.new
会话[:events]类别,:action=>action,:label=>label}
结束
。。尽可能多地从您的单个控制器方法调用该方法

# 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>
#application.html.erb
... 其他东西。。。
var _gaq=_gaq | |[];
_gaq.push([''设置帐户','');
_gaq.push([''u trackPageview']);
。。这里提到的小部分是:

# _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 %>
#u ga_events.html.erb
_gaq.push([''跟踪事件','','');

所有这些几乎都是正确的,但是Google analytics不接受空字符串,最后一个参数必须是整数

因此我修改了\u ga\u events.html.erb,如下所示:

<% unless session[:events].nil? %>
    <% session[:events].each do |event|%>
        <%params=[]%>
        <%params << "'_trackEvent'"%>
        <%params << "'#{event[:category] || "undefined" }'"%>
        <%params << "'#{event[:action] || "undefined" }'" %>
        <%params << "'#{event[:label]}'" if !event[:label].blank?%>
        <%params << event[:value].to_i if !event[:value].blank?%>
        _gaq.push([<%=params.join(', ')%>]);
    <% end %>
    <% end %>
<% session[:events] = Array.new %>


很晚才跳上这个suuuuper,但这里有一个非常快速的选项。只需将此代码放置在应触发自定义事件的控制器中:

flash.now[:event] = "<script>_gaq.push(['_trackEvent', '#{category}', '#{action}'])</script>".html_safe
flash.now[:event]=“_gaq.push([''''u trackEvent',''.{category}','.{action}'))”。html\u安全

比使用会话短得多

你可以使用这个叫做。它允许您将一系列流行的跟踪器(GA、GTM、FB Pixel等)连接到它,并通过如下控制器触发相关事件:

def show
  tracker do |t|
    t.google_analytics :send, { type: 'event', category: 'button', action: 'click', label: 'nav-buttons', value: 'X' }
  end
end
即:

ga('send', { 'hitType': 'event', 'eventCategory': 'button', 'eventAction': 'click', 'eventLabel': 'nav-buttons', 'value': 'X' })
或者,您可以使用另一个gem-,其工作方式类似:

Gabba::Gabba.new("UT-1234", "mydomain.com").page_view("something", "track/me")

我现在正在尝试…我如何在不等待GA更新数据的情况下确认它是否有效?此外,每个帐户都有自己的子域是否重要?我想单独跟踪所有子域(我已经为此设置了高级过滤器)。最后,这在dev环境中是如何工作的?谢谢在原来的帖子中添加了解决方案-你介意看看我的答案是否正确吗?我认为“这行得通”的适当合理性检查是查看浏览器中生成的HTML,看看是否看到用HTML编写的适当JS。与GA的文档相比,您还可以使用rspec请求测试在HTML中对适当的JS进行单元测试。如果这个解决方案将适当的JS写入HTML,那么更多的问题是“如何测试GA事件”,我认为这是一个完全不同的问题。我不知道如何在一个GA帐户中管理多个子域。对于我的开发环境,我通常会设置一个单独的GA帐户,并将事件推送到那里。(这就是为什么GA帐户是一个变量
CONFIG['GA\u account\u id']
)它无助于解决等待GA更新数据的问题,但至少您的开发事件不会混淆到您的生产数据中。看起来我把一切都设置好了,而且_trackEvent方法在我的GA代码中包含了所有适当的变量…但是由于某种原因,GA中没有显示任何内容。我想可能有延迟,但已经10个小时了。
flash.now[:event] = "<script>_gaq.push(['_trackEvent', '#{category}', '#{action}'])</script>".html_safe
def show
  tracker do |t|
    t.google_analytics :send, { type: 'event', category: 'button', action: 'click', label: 'nav-buttons', value: 'X' }
  end
end
ga('send', { 'hitType': 'event', 'eventCategory': 'button', 'eventAction': 'click', 'eventLabel': 'nav-buttons', 'value': 'X' })
Gabba::Gabba.new("UT-1234", "mydomain.com").page_view("something", "track/me")