Javascript 在脚本标记中使用Ruby变量

Javascript 在脚本标记中使用Ruby变量,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我在rails控制器中定义对讲机事件,如下所示: <% if @intercom_event.present? %> <script> Intercom('trackEvent', '<%= @intercom_event %>'); </script> <% end %> 对象\u控制器.rb @object.save @intercom_event = 'object-saved' 在我的application.

我在rails控制器中定义对讲机事件,如下所示:

<% if @intercom_event.present? %>
  <script>
    Intercom('trackEvent', '<%= @intercom_event %>');
  </script>
<% end %>
对象\u控制器.rb

@object.save
@intercom_event = 'object-saved'
在我的
application.html.erb
中存在的部分中,我正在尝试运行以下脚本:

<script>
  Intercom('trackEvent', '<%= @intercom_event %>');
</script>

即使定义了
@intercom\u event
,它也会完全忽略脚本

你走对了方向:

<%- if @intercom_event.present? -%>
  <%= javscript_tag do -%>
    Intercom('trackEvent', '<%=j @intercom_event %>');
  <%- end -%>
<%- end -%>

对讲机(‘追踪事件’,“”);
j
方法对JavaScript上下文进行转义,就像对HTML进行的附带方法
h
转义一样。这对于避免脚本错误非常重要


对于更复杂的结构,
@intercom\u event.to\u json
将为您提供与JavaScript兼容的表示形式。

您的思路是正确的:

<%- if @intercom_event.present? -%>
  <%= javscript_tag do -%>
    Intercom('trackEvent', '<%=j @intercom_event %>');
  <%- end -%>
<%- end -%>

对讲机(‘追踪事件’,“”);
j
方法对JavaScript上下文进行转义,就像对HTML进行的附带方法
h
转义一样。这对于避免脚本错误非常重要


对于更复杂的结构,
@intercom\u event.to\u json
将为您提供与JavaScript兼容的表示形式。

通过查看参数是否存在而不是
@intercom\u event
变量来实现

<% if params[:intercom].present? %>
  <script>
    Intercom('trackEvent', '<%= params[:intercom] %>');
  </script>
<% end %>

对讲机(‘追踪事件’,“”);

通过查看参数是否存在而不是
@intercom\u事件
变量,使其正常工作

<% if params[:intercom].present? %>
  <script>
    Intercom('trackEvent', '<%= params[:intercom] %>');
  </script>
<% end %>

对讲机(‘追踪事件’,“”);

Hmm包装在
标记中时仍不发送。当我删除if语句时,它现在不会向对讲机发送任何信息。我想知道为什么在视图文件中看不到控制器中定义的变量控制器实例变量会自动传播到视图级别。你确定你的动作正确吗?始终检查
log/development.log
.Hmm当包装在
标记中时仍不发送。当我删除if语句时,它现在不会向对讲机发送任何信息。我想知道为什么在视图文件中看不到控制器中定义的变量控制器实例变量会自动传播到视图级别。你确定你的动作正确吗?始终检查
log/development.log