有谁知道如何在 rails 的资产文件中渲染部分(或至少包含另一个文件)?我有一个模板/文件夹设置(其中包含静态 HTML 文件),这些文件中有一些我想在其他模板文件之间抽象和共享的点点滴滴。
该render
方法不适用于任何资产管道文件。我确定我可以通过找到正确的模块以某种方式包含它,但我不确定这是否可行,因为渲染模块本身可能依赖于其他模块、方法、变量。
关于如何做到这一点的任何想法?或者如果可能?
有谁知道如何在 rails 的资产文件中渲染部分(或至少包含另一个文件)?我有一个模板/文件夹设置(其中包含静态 HTML 文件),这些文件中有一些我想在其他模板文件之间抽象和共享的点点滴滴。
该render
方法不适用于任何资产管道文件。我确定我可以通过找到正确的模块以某种方式包含它,但我不确定这是否可行,因为渲染模块本身可能依赖于其他模块、方法、变量。
关于如何做到这一点的任何想法?或者如果可能?
我想出了我自己的解决方案。
您在 lib 文件夹中创建一个帮助文件并调用它assets_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
然后将该文件包含在您希望使用它的每个资产文件的顶部。在文件内部,您可以像这样使用部分命令。
<% require './lib/asset_helper.rb' %>
<!--- some HTML template --->
<%= partial('page/_partial', :var1 => true, :var2 => false) %>
<---- some other page --->
这行得通。但唯一的问题是 Rails 3.1 将缓存资产文件夹中的任何内容。因此,如果您编辑部分内容,您将需要更新它所在的根文件,以便为该文件清除缓存。