为什么“<%= @ comments.each {| comment | comment.title}%>”不产生评论标题但是“comment.inspect”......?

时间:2012-08-06 14:41:44

标签: ruby-on-rails erb

为什么以下代码会为我生成不同的输出?

<% @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">]

1 个答案:

答案 0 :(得分:4)

这是因为<%= %>将打印出代码块返回的值。在这种情况下,您有一个可以在其中调用的可枚举@comments。方法each将返回使用的枚举,在本例中为@comments

如果您想打印出标题集合,可以使用:

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

或更简洁

<%= @comments.map(&:title) %>