我正在我的rails控制器中定义一个内部通信事件,如下所示:
object_controller.rb
@object.save
@intercom_event = 'object-saved'
在我的application.html.erb
中存在的部分内容我正在尝试运行此脚本:
<script>
Intercom('trackEvent', '<%= @intercom_event %>');
</script>
脚本运行并将事件发送到Intercom,就像它应该的那样。我以为我正在将ruby变量正确放入<script>
标记,除了@intercom_event
的输出为:<%= @intercom_event %>
时应该是:object-saved
。
此外,如果我将此<script>
标记包装在if语句中(以便每次重新加载页面时都不发送事件),如下所示:
<% if @intercom_event.present? %>
<script>
Intercom('trackEvent', '<%= @intercom_event %>');
</script>
<% end %>
即使定义了@intercom_event
,它也会完全忽略脚本。
答案 0 :(得分:2)
通过查看params是否存在而不是@intercom_event
变量来实现它的工作
<% if params[:intercom].present? %>
<script>
Intercom('trackEvent', '<%= params[:intercom] %>');
</script>
<% end %>
答案 1 :(得分:0)
你走在正确的轨道上:
<%- if @intercom_event.present? -%>
<%= javscript_tag do -%>
Intercom('trackEvent', '<%=j @intercom_event %>');
<%- end -%>
<%- end -%>
j
方法为JavaScript上下文转义,例如HTML的伴随方法h
转义。这对于避免脚本错误很重要。
对于更复杂的结构,@intercom_event.to_json
会为您提供JavaScript兼容的表示。