在Rails意外行为中按空格分割字符串

时间:2013-06-15 03:01:05

标签: ruby-on-rails ruby

我想用空格分割字符串

irb(main):001:0> input = "dog cat"
=> "dog cat"
irb(main):002:0> output = input.strip.split(/\s+/)
=> ["dog", "cat"]

这很好。但是,我也是在Rails的控制器中执行此操作,当我提供相同的输入,并将输出#{output}打印到我的视图中时,它显示为dogcat而不是{{ 1}}。我真的很困惑如何发生这种情况。有什么想法吗?

我在控制器中使用["dog", "cat"]进行打印,在我看来,我有@notice = "#{output}"

3 个答案:

答案 0 :(得分:2)

不是在控制器中拆分字符串并将其作为数组发送到视图,而是将整个字符串发送到视图中:

input = "dog cat"
@notice = input

然后,在您的视图中,拆分字符串并将其显示为字符串化数组:

<%= array(@notice.strip.split(/\s+/)).to_s %>

答案 1 :(得分:0)

如果你打印一个字符串数组,你将把所有字符串连接在一起。如果您已输入irb,则会在print "#{output}"中获得相同的内容。您需要决定如何格式化它们并以这种方式打印它们,也许使用简单的辅助函数。例如,帮助程序可以执行:

output.each { |s| puts "<p>#{s}</p>" }

或者你喜欢什么。

答案 2 :(得分:0)

继续您的示例代码:

>> input = "dog cat"
=> "dog cat"
>> output = input.strip.split /\s+/
=> ["dog", "cat"]
>> joined = output.join ' '
=> "dog cat"

请记住,Ruby有几个帮助程序,如%w%W,可以让您将字符串转换为单词数组。如果你从一个单词数组开始,每个单词可能在其单个项目之前和之后都有空格,你可以尝试这样的事情:

>> # `input` is an array of words that was populated Somewhere Else
>> # `input` has the initial value ["  dog ", "cat\n", "\r tribble\t"]
>> output = input.join.split /\s+/
=> ["dog", "cat", "tribble"]
>> joined = output.join ' '
=> "dog cat tribble"

在没有任何参数的情况下调用String#join会将stringish数组项与 no 之间的分隔连接在一起,并且在您的示例中,您只需将数组呈现为字符串即可

>> @notice = output
>> # @notice will render as 'dogcat'

相反:

>> @notice = input.join.split(/\s+/).join ' '
>> # @notice will render as 'dog cat'

然后你去。