2017-04-04 52 views
0

所以我试图让我的代码来匹配条纹的JS例如:创建在JavaScript中的多行字符串接受Ruby对象

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正在运行,因为控制台错误正在打印正确的值。

此外,红宝石是正确的,因为它在控制台产生Rails.application.secrets.stripe(['publishable_key']).first[1].to_s => "pk_test_REST_OF_MY_KEY"

+0

那是什么被作为结果产生的实际JS? –

+0

你知道@SergioTulentsev我是新来js /前端工作。我会看看检查>元素或页面源代码吗? – HashRocketSyntax

+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 %> 
); 
+0

感谢您的帮助。从视图中产生这个错误'只允许生成JSON对象或数组',这阻止了视图的加载。它也导致一些疯狂的语法突出显示:http://imgur.com/xyGUzxs – HashRocketSyntax

+0

我更新了我的答案 – Fallenhero

+0

嗯,现在看起来它试图运行正确的线,但''%= j(Rails.application。 (''publishable_key'])。first [1] .to_s)%>''但仍然输出这个错误'只生成JSON对象或数组允许' – HashRocketSyntax

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