以下是我的看法:
<%= javascript_include_tag "social_sharing.erb" %>
然后我有:assets / javascripts / social_sharing.erb.js,其中包含一些ERB标签,例如<%= post.id%> …
第一个问题是我看到此错误消息:
`Asset filtered out and will not be served: add `Rails.application.config.assets.precompile += %w( social_sharing.erb.js )` to `config/initializers/assets.rb` and restart your server
如果我遵循这些指示,那么我将获得js文件,但没有评估任何ERB标记,所以我仍然看到<%= post.id%>在链接的js文件中.
解决方法
该文件应命名为assets / javascripts / social_sharing.js.erb(最后使用.erb),否则Rails资产管道将不知道处理它并将其作为纯JavaScript进行提供. include标记应为<%= javascript_include_tag“social_sharing.js”%>而不是.erb,虽然
the .js is optional.
资产文件夹中的所有内容都将通过asset pipeline进行处理,并可以通过asset helper tags轻松获取.
但是,javascript_include_tag和资产管道是真正的静态资产,只能预编译一次,然后为每个相关请求提供相同的文件.如果您尝试包含动态内容,例如<%= post.id%>从请求到请求会有所不同,您可能希望将.js.erb文件移动到views目录中的某个位置并将其呈现为部分,类似于this question的第一个答案:
<script> render partial: '[somewhere]/social_sharing',post: @post </script>