

Ruby on Rails 5 アプリケーションプログラムの中の記述でわからない箇所があります。

[code]

    def list_tag(collection, prop)
      content_tag(:ul) do
        collection.each do |element|
          concat content_tag(:li, element.attributes[prop])
        end
      end
    end
    
[/code]

という記述があります。  
ビューヘルパー、コレクションにはオブジェクトの配列、プロップにはオブジェクトのプロパティ名。  
各オブジェクトの同一プロパティをリスト形式で出力するビューヘルパーです。

ここで疑問なのが、each内でconcatを使用しli要素を出力しているのはわかるのですが、なぜul要素にはconcatが必要ないのでしょうか。ご教授ください。  
（初学者なので、ご考慮していただけるとたすかります。Railsのバージョンが古い部分については承知しています）


CC BY-SA 4.0
2019-06-19T23:47:10.290
55927
2023-04-29T16:07:40.993
2019-06-20T00:17:22.027
3060
34792
question
ruby-on-rails
Rails concatの挙動について


このメソッドは以下の呼び出し構成になっていると思います。

[code]

    list_tag -> content_tag -> content_tagの引数のブロック
    
[/code]

`list_tag` は文字列を返す必要があります。 `list_tag` 中で文字列を返すメソッド呼び出しは `content_tag`
一つだけです。なので、`concat` は必要ありません。

逆に、`content_tag`の引数のブロックは、ループにより複数回数のメソッド呼び出しがあるため、ループ毎の結果の文字列を結合する必要があります。このため、`concat`
で文字列を結合する必要があります。

`concat` はインスタンス変数の内部バッファ(`output_buffer`)に文字列を結合します。  
`content_tag` は引数ブロックで変更された `output_buffer` を結合した状態で、自身の返り値にします。


CC BY-SA 4.0
2020-08-07T08:11:03.957
69332
2020-08-07T08:11:03.957
41412
55927
answer