[英]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.