预编译时从 js.erb 文件访问模型

Posted

技术标签:

【中文标题】预编译时从 js.erb 文件访问模型【英文标题】:Accessing a Model from js.erb file when precompiling 【发布时间】:2012-10-15 17:58:34 【问题描述】:

我有一个 Rails 3 应用程序,我试图用我数据库中的每个国家(少于 300 个国家)作为 JSON 对象填充一个 javascript 变量。这是我的nations.js.erb 文件中的相关行:

_this.nations = <%= Nation.all.to_json :only => [:id], :methods => :text %>;

当我在浏览器中调用我的 js 文件时,/assets/users.js 需要国家文件,_this.nations 变量被完美填充。当我尝试进行预编译时,我得到以下信息:

$> rake assets:precompile
$> rake aborted!
uninitialized constant Nation (in nations.js.erb)

所以我的问题是:是否可以从js.erb 文件中引用Nation 模型或任何模型进行预编译?我也尝试使用我的NationsHelper,但我的错误只是更改为未初始化的常量 NationsHelper。

我对 RoR 还很陌生,所以如果需要我没有提供的相关信息,请直接询问。

【问题讨论】:

【参考方案1】:

如果您在某处将config.assets.initialize_on_precompile 设置为false,请尝试启用它

config.assets.initialize_on_precompile = true

【讨论】:

这出人意料地影响 Heroku 的 intialize_on_precompile 问题。【参考方案2】:

你为什么不在控制器中拨打电话

控制器

@nations = Nation.all

nations.js.erb

_this.nations = <%= @nations.all.to_json :only => [:id], :methods => :text %>;

【讨论】:

以上是关于预编译时从 js.erb 文件访问模型的主要内容,如果未能解决你的问题,请参考以下文章

Rails:在 CoffeeScript 或 JavaScript 资产文件中访问控制器实例变量

weblogic对JSP预编译weblogic读取JSP编译后的class文件ant中jspc预编译JSP

“该文件尚未预编译,无法请求”

播放预编译命令仅在预编译文件夹中生成一个类文件,而不为控制器、模型等生成类文件

渲染 js.erb 布局但 html.erb 视图文件

在下载字节时从 NSURLSessionDownloadTask 访问字节