¿Cómo puedo mejorar un método de ayuda carriles con un archivo de configuración?
-
06-09-2019 - |
Pregunta
Tengo un ayudante de rieles en mi archivo application_helper.rb que tiene este aspecto:
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
Las variables '' external_links es un hash que se debe proceder de un archivo externo. El archivo puede ser algo tan simple como un hash rubí o un simple configuración YML.
Tal vez me falta algo - pensé que sería capaz de definir el hash en la sintaxis de rubí en un archivo externo y 'require' desde environment.rb, pero eso no quiere exponer a la variable de hash en el ayudante .
¿Cómo puedo exteriorizar un hash rubí tal que será "de alcance" en un método de aplicación de ayuda?
Solución
Utilice un archivo básico YML como usted ha indicado y luego cargarlo a través de:
config = YAML::load_file(RAILS_ROOT+'/config/external_urls.yml')
A continuación, puede acceder a ella a través del objeto "config" en consecuencia. Si el cambio de archivos duerma entre las peticiones que podía almacenar en caché esta carga de archivos para su uso posterior (así que no se abrió y analiza en cada uso), pero eso es una optimización del rendimiento y no es crítica para una prueba de concepto.
Otros consejos
de aplicaciones Config , que me permite configurar RAILS_ROOT / config / application_config.yml como esto:
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
A continuación, hacer referencia a ellos como esto:
class FooController < ApplicationController
def index
@base_url = property(:base_url)
end
end
También está el AppConfig complemento , que se ve aún mejor, pero no tienen probado todavía.