簡體   English   中英

在JavaScript中創建一個多行字符串來接受ruby對象

[英]Creating a multi-line string in javascript that accepts ruby object

所以我試圖讓我的代碼匹配Stripe的js示例:

var stripe = Stripe('pk_test_REST_OF_MY_KEY');

這是我的.js.erb文件中的行,這些行調用了.js.erb文件中的右鍵。 呈現時,我在瀏覽器控制台中收到以下錯誤Uncaught ReferenceError: pk_test_REST_OF_MY_KEY is not defined

  var stripe = Stripe(
    <% if Rails.env == 'production' %>
      <%= Rails.application.secrets.stripe(['publishable_key']).second[1].to_s %>
    <% else %>
      <%= Rails.application.secrets.stripe(['publishable_key']).first[1].to_s %>
    <% end %>
  );

我試過了

... Stripe(` 
  RUBY LINES BETWEEN BACKTICKS 
`);

... Stripe(' + 
  RUBY LINES BETWEEN PLUSES 
+ ');

因此,它必須是帶有(' ');挑剔js語法(' '); 不接受ruby值作為字符串,對不對? 我們知道ruby正在運行,因為控制台錯誤正在打印正確的值。

另外,紅寶石是正確的,因為它在控制台中生成Rails.application.secrets.stripe(['publishable_key']).first[1].to_s => "pk_test_REST_OF_MY_KEY"

我想我應該是:

var stripe = Stripe(
  <% if Rails.env == 'production' %>
    '<%= Rails.application.secrets.stripe(['publishable_key']).second[1].to_s %>'
  <% else %>
    '<%= Rails.application.secrets.stripe(['publishable_key']).first[1].to_s %>'
  <% end %>
);

首先,整理一下代碼以查看發生了什么將是有幫助的。 將邏輯上移到文件頂部:

<%
  config = Rails.application.secrets.stripe(['publishable_key'])
  stripe_key = Rails.env.production? ? config.first[1] : config.second[1]
%>

...或者,更好的是,一個助手:

def stripe_key
  config = Rails.application.secrets.stripe(['publishable_key'])
  Rails.env.production? ? config.first[1] : config.second[1]
end

然后,在您的JavaScript中:

var stripe = Stripe('<%= j(stripe_key) %>');

// ...or...

var stripe = Stripe(<%= stripe_key.to_json %>);

在兩種情況下都要注意是否存在單引號。 j helper將在字符串內轉義特殊字符(包括引號和換行符),但是返回的字符串將不會被用引號引起來,而to_json將返回已經用雙引號to_json來的字符串。

PS當你這樣說:

Rails.application.secrets.stripe(['publishable_key'])

...您確定不是故意的:

Rails.application.secrets.stripe['publishable_key']

# ...or...

Rails.application.secrets.stripe.publishable_key

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM