【问题标题】:Rails Helper renders array, not htmlRails Helper 呈现数组,而不是 html
【发布时间】:2016-02-02 02:12:57
【问题描述】:

如果我调用render_slider_items(["a.png", "b.png", "c.png"]),我的网页会显示数组["a.png", "b.png", "c.png"],而不是html。

module ApplicationHelper
 def render_slider_items(filenames)
    filenames.each do |filename|
      content_tag(:div, class: "col-md-3") do 
        tag("img", src: "assets/#{filename}")
      end
    end
  end
end

这是什么原因造成的?

更新 - 解决方案-

      def render_slider_items(filenames)
        filenames.collect do |filename|
          content_tag(:div, class: "col-md-3") do 
            tag("img", src: "assets/#{filename}")
          end
        end
      end.join().html_safe

【问题讨论】:

  • each 返回什么? Ruby 方法返回什么?
  • fillennames 是一个文件名数组,因此 .each 返回每个文件名的字符串。
  • 所以你的方法的问题在于它返回了 each 返回的内容,所以这只是 return filenames 的复杂表达方式。

标签: ruby ruby-on-rails-4 helpers partials content-for


【解决方案1】:

我猜你是这样称呼的

#some_file.html.erb
<%= render_slider_items(["a.png", "b.png", "c.png"]) %>

如果是这种情况,发生这种情况的原因是因为 .each 方法 returns the array 它正在迭代。你最好做这样的事情:

module ApplicationHelper
 def render_slider_items(filenames)
    filenames.collect do |filename|
      content_tag(:div, class: "col-md-3") do 
        tag("img", src: "assets/#{filename}")
      end
    end
  end.join.html_safe
end

【讨论】:

  • 略有改善。现在它返回一个
    的数组,而不是仅仅渲染 html。
  • 我还需要添加.join().html_safe
猜你喜欢
相关资源
最近更新 更多
热门标签