将Ruby数组转换为字符串

时间:2014-08-22 15:51:01

标签: ruby-on-rails ruby string ruby-on-rails-3

这个问题与“Ruby array to string conversion”非常相似,但在我的情况下,使用表格['12','34','35','231'],我希望得到一个字符串:

'12' &
'32' &
'35' &
'231'

我的想法是在名为content的装饰器方法中构造一个字符串,当我在视图<p><%= table.content %></p>中显示该特定字符串时,我希望它在显示时自动呈现,而不添加任何HTML视图中的标记,基本上模仿了每两行之间的<br>标记。

我已经拥有的是:

def content
  string = "Table content "
  table = ['12','34','35','231']
  string = table.map do |row|
    row
  end
  "#{string.join(" & \n")}"
end

任何线索?

2 个答案:

答案 0 :(得分:0)

def content
  table = ['12','34','35','231']
  results = table.map { |r| "'#{r}'" }.join(" & <br/>")
  "<pre>#{results}</pre>".html_safe
end

map通过将数组的每个成员应用于块来创建新数组。这会将您的数字用单引号括起来。

你的几行代码是多余的 - string = "Table content "什么也没做,而且:

string = table.map do |row|
    row
end

不必要地旋转数组并返回一个相同的数组。

答案 1 :(得分:0)

理解how browsers render text非常重要。

ary = ['12','34','35','231']

File.write('test.html', '<html><body><pre>' + ary.map{ |s| "'#{ s }'"}.join(" &\n") + '</pre></body></html>')

这将创建一个类似于:

的HTML文件
<html><body><pre>'12' &
'34' &
'35' &
'231'</pre></body></html>

打开&#34; test.html&#34;在浏览器中,您将看到输出垂直显示,如下所示:

'12' &
'34' &
'35' &
'231'

浏览器吞噬空格,这意味着,除非您将输出包装在<pre> tags中,否则浏览器将忽略换行符,并将文本拉为单行/句子。他们这样做是因为他们“有帮助”#34;

在您的代码中,ary.map{ |s| "'#{ s }'"}.join(" &\n")是控制器中生成字符串的内容。然后,在您的视图中包裹输出带<pre>字符串的行,您应该很好。