1

我需要将哈希的输出连接到字符串中。

哈希看起来像这样:

 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\">]" 

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

polka.com,test.com,help.com

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

4

3 回答 3

6
nas.location.walledgardens.collect { |w| w.url }.join(",")

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

于 2012-05-14T20:25:12.793 回答
6

您拥有的不是Hash,而是 Walledgarden 对象的Array(它们看起来是ActiveRecord::Base子类)。

试试这个:

nas.location.walledgardens.collect(&:url).join ","

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

于 2012-05-14T20:25:23.943 回答
4

使用Array#map

nas.location.walledgardens.map(&:url).join ','
于 2012-05-14T20:24:16.623 回答