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

あなたが持っているのはハッシュではなく、Walledgardenオブジェクトの配列です(それらは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 に答える