ruby-on-rails - 如何在 Rails 5 的路由中使用环境变量

标签 ruby-on-rails ruby-on-rails-5

我可以使用 .env 文件使应用程序可以在本地访问环境变量

问题是,我不知道如何在路由中使用变量

我尝试过

的变体
get 'v1/packages<%= ENV["key1"] %>' => 'flatfiles#raw'

不幸的是,这不起作用(浏览器说没有路由匹配,但我也可以从运行 rake paths 中看出,这给出了

GET  /v1/packages%3C%25=%20ENV[%22key1%22]%20%25%3E(.:format)

我也尝试过

get 'v1/packages#{ENV["key1"]}' => 'flatfiles#raw'

这使得路线

GET  /v1/packages%23%7BENV[%22key1%22]%7D

这两种方法似乎都没有像我希望的那样将“key1”变量插入到路由中

为了更好地衡量,我还尝试创建一个 Key 模型,并以这种方式访问​​它,但路由仍然按字面解释变量

  @key1 = Key.find(1).private_key
  get 'v1/packages#{@key1}'  => 'flatfiles#raw'
GET /v1/packages_and_functions%23%7B@key1%7D

最佳答案

我相信您的错误是尝试在单引号字符串中使用格式字符串:

get 'v1/packages#{ENV["key1"]}' => 'flatfiles#raw'

这意味着字符串被按原样使用。您应该使用双引号,以便 ruby​​ 能够理解您实际上想要字符串中的格式:

get "v1/packages#{ENV['key1']}" => 'flatfiles#raw'

如果您的编辑器对语法着色有适当的支持,您会注意到前一个编辑器将显示为单一颜色,而第二个编辑器将突出显示格式部分 ( #{} )。

最后,<%= ... %>语法仅在 ERB 模板中使用,当您编辑某些 .yml 时,Rails 会为您处理该语法。或html.erb文件,或明确使用 ERB.new(...)在您的代码中。

HTH

关于ruby-on-rails - 如何在 Rails 5 的路由中使用环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308551/

相关文章:

ruby-on-rails - 复制带有 ID 列的 CSV 文件

Javascript - 更改事件对象同级上的文本

ruby-on-rails - ruby on Rails : alias for variable in model?(能够执行 m.attr_a == m.attr_b 以及赋值)

ruby-on-rails - 2 个域使用相同的主机,但路由不同

ruby-on-rails - 来自模型的 expire_action

ruby-on-rails - `/home/webapp` 不是目录 - Elastic Beanstalk (RAILS)

ruby-on-rails - rails 5 : Devise Gem password Encryption

ruby-on-rails-5 - Rails 5.2 带有 Cocoon 形式的 Active Storage

jquery - Rails 5/Ruby - 拉 :data from external URL to populate form fields when link is pasted

ruby-on-rails - 值为字符串时表属性之和