我的application_helper.rb文件中有一个rails helper,如下所示:
def external_link(name)
url = external_links[name]
if url.blank?
Rails.logger.error "No URL defined for external link [#{name}]!"
return "[URL undefined]"
end
return url
end
'external_links'变量是一个应该来自外部文件的哈希。该文件可以像ruby哈希或简单的YML配置一样简单。
也许我错过了一些东西 - 我以为我能够在外部文件中使用ruby语法定义哈希,并在environment.rb中'require'它,但是这不会在帮助器中公开哈希变量
如何将ruby哈希外部化,使其在应用程序助手方法中处于“范围内”?
答案 0 :(得分:2)
我使用Application Config,这让我可以像这样设置RAILS_ROOT / config / application_config.yml:
development: &defaults
items_per_page: 25
secure_with_basic_auth: false
base_url: development.com
test:
<<: *defaults
base_url: test.com
production:
<<: *defaults
base_url: production.com
然后像这样引用它们:
class FooController < ApplicationController
def index
@base_url = property(:base_url)
end
end
还有AppConfig plugin,看起来更好,但我还没有尝试过。
答案 1 :(得分:1)
使用您指定的基本YML文件,然后通过以下方式加载:
config = YAML::load_file(RAILS_ROOT+'/config/external_urls.yml')
然后您可以通过“config”对象相应地访问它。如果文件在请求之间没有变化,您可以缓存此文件加载以供以后使用(因此在每次使用时都不会打开和解析),但这是性能优化,对于概念验证并不重要。