2012-02-20 27 views
1

部分的にコンマ区切りのリストを作成する最もエレガントな方法は何ですか?Railsは配列の部分をコンマで区切ります

私は最近、部分テンプレートを使用して別のビューテンプレートから送信されたコレクションを反復処理できることを発見しました。だから私は持っているビューテンプレートに:

<% render @dvd.director %> 

次に/view/directors/_director.html.erbに:

@dvd.director.each { |d| puts d.director } 

、:

<%= director.director %> 

これは実際のような何かを私は.joinを以下のように使うことができることを知っています:

<% @dvd.director.map { |t| t.director }.join(", ") %> 

しかし、partialは配列内の各エントリを繰り返し処理しているので、リストを適切に区切り、末尾に醜いカンマを持つ最後のもの(または1つ)を持たないようにするにはどうすればよいでしょうか?

多くのエントリには1人のディレクターしかいません。複数のエントリを適切に持つものを分離したいだけです。私はこれを手動で行うことができます(通常の非反復部分を使用し、自分自身のループを作成することもできます)。しかし、それをやろうとしていて、Railsの方法を学んでいます。

ありがとうございました。 dvd.director @、少し良く説明しようとする

編集

はそうのようなActiveRelationオブジェクトを返します。

[#<Director id: 13, director: "Andrew Stanton">, #<Director id: 14, director: "Lee Unkrich">] 

だから、僕は@dvd.director.join(', ')

ですを行うことはできません

@dvd.director.each { |dir| dir.director } 
以外のデータを取得する別の方法があります

同じ問題があるので、それらの間にコンマを入れたり、ディレクター名だけを抽出して文字列などに入れたりする前に、それらを数えたり、最後の項目ではないことを確認しなければなりません。私が参加することができれば、それは素晴らしいことになるでしょう。

答えて

5

ルビのjoinメソッドでは、配列に要素が1つしかない場合は区切り文字が追加されません。

あなたは、任意のサイズのリストについては、次の操作を行うことができるはずです。

@dvd.director.map(&:director).join(", ") 
+0

グレート、これは、私が必要なものだけで感謝です! – kakubei

+1

すでに 'map(&:director)'を使っている場合、そのファイルにlink_toを追加する方法はありますか? – kakubei

+0

このようなものを試してみてください: '= dvd.directors.map {| director | link_to director.name、dvd_director_path(dvd、director)}。join( "、").html_safe' –

関連する問題