所以我想让我的代码与Stripe的js例子匹配:
var stripe = Stripe('pk_test_REST_OF_MY_KEY');
以下是我的.js.erb
文件中从我的secrets.yml文件调用右键的行。当这呈现时,我在浏览器控制台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正在运行,因为控制台错误正在打印正确的值。
此外,ruby是正确的,因为它在控制台中生成Rails.application.secrets.stripe(['publishable_key']).first[1].to_s
=> "pk_test_REST_OF_MY_KEY"
答案 0 :(得分:1)
我想我应该是:
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 %>
);
答案 1 :(得分:1)
首先,稍微清理一下代码会有所帮助,看看发生了什么。将逻辑移到文件顶部:
<%
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
将返回一个已用双重字符串包裹的字符串。引号。
P.S。当你这样说:
Rails.application.secrets.stripe(['publishable_key'])
......你确定不是这个意思:
Rails.application.secrets.stripe['publishable_key']
# ...or...
Rails.application.secrets.stripe.publishable_key