Rails.application.assets_manifest.find_sources("#{params[:controller]}.js"). 任何?在 Heroku 上崩溃

o..*_*..o 1 ruby-on-rails heroku

在我的 rails 应用程序的 application_layout.html.rb 中,我正在加载控制器特定的 javascript:

<%= javascript_include_tag params[:controller] if Rails.application.assets_manifest.find_sources("#{params[:controller]}.js").any? %>
Run Code Online (Sandbox Code Playgroud)

在我部署到 Heroku 之前,它可以正常工作。比我得到这个错误:

ActionView::Template::Error (undefined method `find_asset' for nil:NilClass)
Run Code Online (Sandbox Code Playgroud)

当我尝试调用从#find_sources 返回的对象上的任何方法时,我遇到了同样的错误。

编辑:

<%= Rails.application.assets_manifest.find_sources("#{params[:controller]}.js") %>
Run Code Online (Sandbox Code Playgroud)

返回 #&lt;Enumerator:0x007fda655a17b0&gt;

任何的想法?

谢谢

Igo*_*ger 5

它不起作用,因为在生产中有一个静态清单文件而在开发中没有(通常,它取决于环境配置)。您可以创建一个辅助方法来根据当前环境配置进行不同的检查:

def asset_exist?(path)
  if Rails.configuration.assets.compile
    Rails.application.precompiled_assets.include? path
  else
    Rails.application.assets_manifest.assets[path].present?
  end
end
Run Code Online (Sandbox Code Playgroud)

请检查此问题以获取更多详细信息。