Estoy tratando de jugar con mi código y he llegado a un
Tengo una etiqueta de script en un archivo erb. Obtengo la zona horaria del navegador y la almaceno en una constante. Quiero usar el valor de la constante en un método API de Rails como argumento, pero aparece el error.
variable local indefinida o método `browser_time_zone' para #
<script> // this returns Eastern Time (US & Canada) const browser_time_zone = Intl.DateTimeFormat().resolvedOptions().timeZone; const timezone = <%= ActiveSupport::TimeZone::MAPPING.key(browser_time_zone) %> </script>¿Cómo puedo usar el valor de browser_time_zone como argumento para el método de mapeo de zona horaria? Cualquier ayuda será apreciada
No creo que pueda hacer lo que quiera, porque la ejecución de Javascript y Ruby ocurre en diferentes momentos (Ruby primero cuando la página se procesa/crea, luego javascript cuando el navegador carga el HTML). En su lugar, podrías intentar algo como esto:
<script> // this returns Eastern Time (US & Canada) // https://stackoverflow.com/a/28191966/2543424 function getKeyByValue(object, value) { return Object.keys(object).find(key => object[key] === value); } const time_zone_mapping = <%= ActiveSupport::TimeZone::MAPPING.to_json.html_safe %>; const browser_time_zone = Intl.DateTimeFormat().resolvedOptions().timeZone; const timezone = getKeyByValue(time_zone_mapping, browser_time_zone); </script> Aquí estamos volcando el contenido de ActiveSupport::TimeZone::MAPPING en una nueva variable de javascript en forma de objeto JSON, y luego accediendo a él de la misma manera que intentaba hacer, pero todo a través de Javascript.
Tenga en cuenta que la sintaxis ActiveSupport::TimeZone::MAPPING.to_json.html_safe puede no ser 100% correcta, pero esa es la idea general