以下是我的看法:
<%= 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标记,所以我仍然在链接的js文件中看到<%= post.id %>
。
答案 0 :(得分:11)
该文件应命名为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>
该文件也需要重命名为_social_sharing.js.erb
。
答案 1 :(得分:2)
我不确定这是答案,但是你对资产管道所做的与javascript相比看起来很不寻常。
要在资源预编译中包含js,请在/config/initalizers/assets.rb文件中添加此行。
Rails.application.config.assets.precompile += %w( social_sharing.js )
我认为一旦在资产管道编译中包含此文件,您根本不需要使用javascript_include_tag
。
如果你试试这个,如果你还有错误和/或渲染问题,请告诉我。