You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails如何动态引入随请求变化文件名的JavaScript标签?

解决Ruby on Rails中动态引入Locale JS文件的问题

你遇到的核心问题是字符串插值在单引号中不生效,再加上资产管道的预编译配置可能没跟上,导致动态路径解析失败。下面分步骤给你解决办法:

  • 第一步:修正字符串插值的引号问题
    Ruby中只有双引号包裹的字符串才会解析#{}形式的插值表达式,单引号会把内容当成纯文本。你原来的代码用了单引号,所以#{I18n.locale}根本没被替换成实际的locale值,当I18n.locale解析异常时,就会生成locales/.js这种无效路径。
    把代码改成双引号即可:

    <%= javascript_include_tag "locales/#{I18n.locale}.js" %>
    
  • 第二步:确保Locale文件被加入资产预编译列表
    默认情况下,Rails资产管道不会自动预编译assets/javascripts/locales/子目录下的文件,所以即使路径正确,资产也找不到对应的文件。你需要在config/initializers/assets.rb中添加预编译规则:

    Rails.application.config.assets.precompile += %w( locales/*.js )
    

    这样Rails就会把locales目录下所有的JS文件都加入预编译列表。

  • 第三步:验证Locale值的正确性
    虽然你说同一文件其他地方能正常使用I18n.locale,但还是建议在视图里临时输出一下这个值确认:

    <%= "当前Locale: #{I18n.locale}" %>
    

    确保它输出的是en-GB、en-CA这种和你的JS文件名完全匹配的字符串(注意大小写,Rails资产路径是区分大小写的)。

  • 额外注意:ERB后缀的处理
    你的文件是en-GB.js.erb这种带.erb后缀的,Rails会在预编译时自动处理erb模板,生成对应的en-GB.js文件,所以你在javascript_include_tag里不需要加.erb后缀,这部分你之前的写法是对的。

按照这几步调整后,应该就能正确根据请求的Locale动态引入对应的JS文件了。

内容的提问来源于stack exchange,提问作者j_d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:42:32