Rails 3从Collection.each块返回数组

时间:2012-11-07 22:24:48

标签: ruby arrays ruby-on-rails-3 loops

我正在尝试将一些json返回到调用操作。我要传递的一个参数是一个通过循环遍历集合构建的数组数组:

render :json => {     
:rows => @classrooms.each do |classroom|
          [classroom.name, classroom.students.count]
        end    
}  

但是,这会设置:整个集合的行,而不是我想要的行:

  <[>教室,学生],[课堂,学生],[课堂,学生]]

有没有办法循环整个集合并在一个块中返回一个数组?

2 个答案:

答案 0 :(得分:4)

Enumerable#map是正确的工具。

render :json => {
  :rows => @classrooms.map {|c| [c.name, c.students.count]}
}

答案 1 :(得分:0)

另一种方法...... each_with_object 方法:

render :json => {     
:rows => @classrooms.each_with_object([]) do |classroom, a|
          a << [classroom.name, classroom.students.count]
        end    
}