1

次のコードが異なる出力を生成するのはなぜですか?

<% @comments.each do |comment| %>
  <%= comment.title %>
<% end %>

生成:

Title 1 title 2

しかし

<%= @comments.each { |comment| comment.title } %>

生成します:

[#<Comment id: 1, commentable_id: 1, commentable_type: "Entry", title: "Title 1", body: "bla", subject: "", user_id: 1, parent_id: nil, lft: 1, rgt: 2, created_at: "2012-07-31 06:15:26", updated_at: "2012-07-31 06:15:26">, #<Comment id: 2, commentable_id: 1, commentable_type: "Entry", title: "tile 2", body: "one more comment", subject: "", user_id: 1, parent_id: nil, lft: 3, rgt: 4, created_at: "2012-08-01 06:58:57", updated_at: "2012-08-01 06:58:57">]
4

1 に答える 1

4

これは<%= %>、コード ブロックによって返された値が出力されるためです。この場合、@commentsそれぞれを呼び出している列挙型があります。このメソッドeachは、使用されている列挙型を返します。この場合は@comments.

タイトルのコレクションを印刷したい場合は、次を使用できます。

<%= @comments.map{ |comment| comment.title } %>

またはもっと簡潔に

<%= @comments.map(&:title) %>
于 2012-08-06T14:45:53.630 に答える