将数组转换为字符串

sim*_*ley 1 ruby ruby-on-rails

我需要将哈希的输出加入到字符串中.

哈希看起来像这样:

 nas.location.walledgardens.to_s

  => "[#<Walledgarden id: 1, location_id: 12, url: \"polka.com\", created_at: \"2012-05-14 17:02:47\", updated_at: \"2012-05-14 17:02:47\">, #<Walledgarden id: 2, location_id: 12, url: \"test.com\", created_at: \"2012-05-14 17:02:47\", updated_at: \"2012-05-14 17:02:47\">, #<Walledgarden id: 3, location_id: 12, url: \"help.com\", created_at: \"2012-05-14 17:02:47\", updated_at: \"2012-05-14 17:02:47\">, #<Walledgarden id: 4, location_id: 12, url: \"yell.com\", created_at: \"2012-05-14 17:02:47\", updated_at: \"2012-05-14 17:02:47\">, #<Walledgarden id: 5, location_id: 12, url: \"sausage.com\", created_at: \"2012-05-14 17:02:47\", updated_at: \"2012-05-14 17:02:47\">]" 
Run Code Online (Sandbox Code Playgroud)

我需要将url值加入以下格式:

polka.com,test.com,help.com
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?我可以轻松地浏览它,但输出有换行符,我需要删除这些以及逗号.

MrD*_*anA 6

nas.location.walledgardens.collect { |w| w.url }.join(",")
Run Code Online (Sandbox Code Playgroud)

.collect方法将收集该块返回的所有内容并将其放入一个数组中,然后该连接将该数组放入一个字符串中,由您提供的任何内容(所以逗号)分隔.

  • @MrDanA:好吧`map`只是`collect`的别名,而`&:url`只是你的块的`Symbol#to_proc`快捷方式,所以本质上它是相同的解决方案.:-) (2认同)

jtb*_*des 6

你拥有的不是Hash,而是Walledgarden对象的数组(它们看起来是ActiveRecord :: Base子类).

试试这个:

nas.location.walledgardens.collect(&:url).join ","
Run Code Online (Sandbox Code Playgroud)

(注意:#map并且#collect是等效的,所以你选择哪一个应该考虑可读性!)