如何将 Ruby 会话变量传递给 JavaScript 标签



我正在与一家使用 JavaScript 标签进行销售归因的供应商合作。 我需要将会话变量传递给标签。 标签正在触发,我可以在日志中看到变量,但在标签中看不到。

我验证了会话变量是通过向控制器添加puts{variable}来设置的,并在日志中看到正确的值,但无法获取 JavaScript 标签中的变量。

这是标签代码:

:javascript
  /* Extole Script */
  (function(c,e,k,l,a){c[e]=c[e]||{};for(c[e].q=c[e].q||[];a<l.length;)k(l[a++],c[e])})(window,"extole",function(c,e){e[c]=e[c]||function(){e.q.push([c,arguments])}},["createZone"],0);
  /* End Extole Script */
   extole.createZone({
     name: 'conversion',
     data: {
       "first_name" = <%= fist_name %>,
       "last_name" = <%= last_name%>,
       "email" = <%= email_address>,
     }
  });

这是控制器代码:

  def index
    if session['cart_products'] == nil
      session['cart_products'] = {}
    end
    puts "nnCouponnn"
    puts session['coupon_code']
    puts session['email_address']
    puts session['first_name']
    puts session['last_name']
    puts session['carttotal']
    puts "nn"
    @cart_size = session['cart_products'].length
  end

日志显示session['first_name']值。

您是否尝试在视图中使用相同的代码,例如:

"first_name" = <%= session["fist_name"] %>

看起来您正在为模板使用 HAML(从:javascript过滤器来看(,但您正在尝试在内部使用 ERB 插值。

您需要使用正确的 HAML 插值:

:javascript
  /* Extole Script */
  (function(c,e,k,l,a){c[e]=c[e]||{};for(c[e].q=c[e].q||[];a<l.length;)k(l[a++],c[e])})(window,"extole",function(c,e){e[c]=e[c]||function(){e.q.push([c,arguments])}},["createZone"],0);
  /* End Extole Script */
   extole.createZone({
     name: 'conversion',
     data: {
       "first_name" = '#{fist_name}',
       "last_name" = '#{last_name}',
       "email" = '#{email_address}',
     }
  });

周围的单引号供JS将这些解释为字符串。

文档: https://haml.info/docs/yardoc/file.REFERENCE.html#ruby-interpolation-

最新更新