You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.slim文件的JavaScript函数中使用Rails条件判断?

修正Slim中根据Rails环境切换Zendesk域名的JS代码

首先,你当前的三元运算符写法有语法问题,而且在Slim模板里嵌入Ruby逻辑的方式需要调整一下——不过你的思路是完全可行的,确实可以通过Rails环境判断来动态生成对应的Zendesk域名,下面是修正后的完整代码:

javascript:
function zopimChat() {
  window.zEmbed || function (e, t) {
    var n, o, d, i, s, a = [], r = document.createElement("iframe");
    window.zESettings = { webWidget: { offset: { vertical: "85px" } } };
    window.zEmbed = function () { a.push(arguments) }, window.zE = window.zE || window.zEmbed,
      r.src = "javascript:false", r.title = "", r.role = "presentation",
      (r.frameElement || r).style.cssText = "display: none",
      d = document.getElementsByTagName("script"),
      d = d[d.length - 1],
      d.parentNode.insertBefore(r, d),
      i = r.contentWindow, s = i.document;
    try { o = s } catch (c) {
      n = document.domain,
        r.src = 'javascript:var d=document.open();d.domain="' + n + '";void(0);',
        o = s
    }
    o.open()._l = function () {
      var o = this.createElement("script");
      n && (this.domain = n), o.id = "js-iframe-async", o.src = e,
        this.t = +new Date, this.zendeskHost = t, this.zEQueue = a, this.body.appendChild(o)
    }, o.write('<body onload="document._l();">'), o.close()
  }
  // 修正后的环境判断逻辑
  ("https://assets.zendesk.com/embeddable_framework/main.js", #{Rails.env.production? ? '"testwebsite.zendesk.com"' : '"testwebsite-staging.zendesk.com"'});
}

关键修正点说明:

  • 在Slim的JavaScript块中,要嵌入Ruby代码(比如Rails.env判断),需要用#{}包裹,这样Slim在渲染模板时会先执行Ruby逻辑,生成对应的JavaScript字符串,确保客户端拿到的是适配当前环境的代码。
  • 原代码的三元运算符缺少?导致语法错误,现在补上标准的三元语法条件 ? 真值 : 假值,同时把判断结果生成带引号的字符串,保证最终输出的JS语法合法。

验证与扩展建议:

你可以在不同环境下启动Rails服务,查看页面的HTML源码,检查生成的JavaScript代码里的Zendesk域名是否符合预期——生产环境应该是testwebsite.zendesk.com,其他环境则是testwebsite-staging.zendesk.com。

如果你的预发布环境有单独的环境标识(比如staging),也可以把判断逻辑改成更精准的多环境分支,比如:

#{Rails.env.production? ? '"testwebsite.zendesk.com"' : Rails.env.staging? ? '"testwebsite-staging.zendesk.com"' : '"testwebsite-dev.zendesk.com"'}

这样就能覆盖开发、预发布、生产等多环境的切换需求了。

内容的提问来源于stack exchange,提问作者seanberlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:47:27