Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 如何在助手方法中为对象数组呈现部分模板?_Ruby On Rails_Ruby_Arrays_Templates_Rendering - Fatal编程技术网

Ruby on rails 如何在助手方法中为对象数组呈现部分模板?

Ruby on rails 如何在助手方法中为对象数组呈现部分模板?,ruby-on-rails,ruby,arrays,templates,rendering,Ruby On Rails,Ruby,Arrays,Templates,Rendering,我使用的是RubyonRails3.2.13,我想在助手方法中为对象数组呈现部分模板。也就是说,在我的助手文件中,我有: def render_articles(articles) articles.each do |article| render :partial => ... end end 但是,上面的方法不返回部分模板,而是返回一个数组。如何正确渲染这些内容?您拥有的每个块都不会返回块的内容,而是返回数组本身。您需要一种机制来返回内容 方法: def render

我使用的是RubyonRails3.2.13,我想在助手方法中为对象数组呈现部分模板。也就是说,在我的助手文件中,我有:

def render_articles(articles)
  articles.each do |article|
    render :partial => ...
  end
end

但是,上面的方法不返回部分模板,而是返回一个数组。如何正确渲染这些内容?

您拥有的每个
块都不会返回块的内容,而是返回数组本身。您需要一种机制来返回内容

方法:

def render_articles(articles)
  html = ""
  articles.each do |article|
    html += render :partial => ...
  end
  html.html_safe
end
另一种方法:

def render_articles(articles)
  articles.inject("") { |html, article| html + render :partical =>... }.html_safe
end

通过使用您的代码,我得到了部分模板的纯文本,而该文本不会呈现为HTML代码,除非我使用
HTML\u-safe
方法。但是,一般来说,使用
html\u-safe
方法是否危险?@user502052您必须使用
html\u-safe
。在这种情况下这并不危险。你也可以做得更简短一些:
articles.map{article | render partial:…}.join(“”).html_safe
@Olivier El-Mekki-出于好奇,两个建议的解决方案(
inject
map
)之间最有效的方法是什么,但仅限于高计算量:。这在您的情况下不会有任何区别(除非生成10000个部分,然后这将不是您的更糟糕的问题:))为什么不干脆
render:partial=>'…',:collection=>articles