Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中呈现资源管道中的部分_Ruby On Rails_Ruby_Asset Pipeline - Fatal编程技术网

Ruby on rails 在Rails中呈现资源管道中的部分

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

有人知道如何在rails中呈现资产文件中的部分(或至少包含另一个文件)吗?我有一个模板/文件夹设置(其中包含静态HTML文件),这些文件中有一些我想在其他模板文件之间抽象和共享的片段

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中处理资产加载的方法。很好的解决方案!顺便问一下,你找到解决缓存问题的方法了吗?因此,每次编辑该部分时,您不必编辑包含该部分的根文件来清除缓存?