2017-04-04 35 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