Ruby on rails 在Rails中呈现资源管道中的部分
有人知道如何在rails中呈现资产文件中的部分(或至少包含另一个文件)吗?我有一个模板/文件夹设置(其中包含静态HTML文件),这些文件中有一些我想在其他模板文件之间抽象和共享的片段Ruby on rails 在Rails中呈现资源管道中的部分,ruby-on-rails,ruby,asset-pipeline,Ruby On Rails,Ruby,Asset Pipeline,有人知道如何在rails中呈现资产文件中的部分(或至少包含另一个文件)吗?我有一个模板/文件夹设置(其中包含静态HTML文件),这些文件中有一些我想在其他模板文件之间抽象和共享的片段 render方法在任何资产管道文件中都不起作用。我相信我可以通过找到正确的模块以某种方式包含它,但我不确定这是否可行,因为渲染模块本身可能依赖于其他模块、方法和变量 有什么办法吗?或者如果可能的话?我已经想出了自己的解决方案 在lib文件夹中创建一个helper文件,并将其命名为assets\u helper.rb
render
方法在任何资产管道文件中都不起作用。我相信我可以通过找到正确的模块以某种方式包含它,但我不确定这是否可行,因为渲染模块本身可能依赖于其他模块、方法和变量
有什么办法吗?或者如果可能的话?我已经想出了自己的解决方案 在lib文件夹中创建一个helper文件,并将其命名为
assets\u helper.rb
。asset_helper中的代码如下所示:
def partial(name, args = {}, dir = 'app/assets/templates')
require 'ostruct'
namespace = OpenStruct.new(args)
name += '.html'
[name + '.erb', name].each do |n|
n = File.join(dir, n)
next unless File.exist?(n)
tpl = ERB.new(File.new(n).read)
compiled = tpl.result(namespace.instance_eval { binding })
return compiled
end
end
然后,将该文件包含在希望在其中使用的每个资产文件的顶部。在文件内部,您可以像这样使用partial命令
<% require './lib/asset_helper.rb' %>
<!--- some HTML template --->
<%= partial('page/_partial', :var1 => true, :var2 => false) %>
<---- some other page --->
true,:var2=>false)%>
这很有效。但唯一的问题是Rails 3.1将缓存资产文件夹中的任何内容因此,如果您编辑一个分部,您需要更新其内部的根文件,以便清除该文件的缓存检查此项,看看在rails中处理资产加载的方法。很好的解决方案!顺便问一下,你找到解决缓存问题的方法了吗?因此,每次编辑该部分时,您不必编辑包含该部分的根文件来清除缓存?