javascript - 在 javascript 中创建接受 ruby​​ 对象的多行字符串

标签 javascript ruby-on-rails ruby erb

所以我试图让我的代码与 Stripe 的 js 示例相匹配:

var stripe = Stripe('pk_test_REST_OF_MY_KEY');

以下是我的 .js.erb 文件中的几行,它们从 Secrets.yml 文件中调用正确的 key 。渲染时,我在浏览器控制台中收到以下错误 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”

最佳答案

首先,稍微清理一下代码以查看发生了什么情况会很有帮助。将逻辑移至文件顶部:

<%
  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 将返回已用双引号括起来的字符串。

附注当你这样说时:

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

...您确定您的意思不是:

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

# ...or...

Rails.application.secrets.stripe.publishable_key

关于javascript - 在 javascript 中创建接受 ruby​​ 对象的多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211138/

相关文章:

ruby - 如何删除 XML::Simple 输出中的 <opt> 标记?

javascript - 当有冒号前缀时比较数字

javascript - 瓦坎达添加收藏

javascript - 在 Vue 模板中调用时如何处理存储中的 null 值?

ruby-on-rails - 零参数值导致崩溃。如果我设置的值存在,我如何只创建一个参数?

ruby-on-rails - 在 ruby​​/rails 中使用 gmail gem 的附件字符编码问题

Javascript 事件链/绑定(bind)

javascript - 关于不显眼的 javascript 我不明白的一件事

ruby-on-rails - 清除 GitLab 中的所有 Assets

ruby-on-rails - rails3,过滤器链停止为 :require_no_authentication rendered or redirected