2013-07-30 26 views
1

我有一个控制器:如何在Rails中返回所有元素数组?

def grafico_gantt 
    @mapa = Hash.new 
    @mapa[:tasks] = [] 
    @projeto.atividades.each do |a| 
     @mapa[:tasks] << { 
      id:a.id, 
      descricao:a.descricao, 
      status:a.status, 
      data_inicial:a.data_inicial.to_datetime.to_i*1000, 
      tempo_gasto:a.tempo_gasto.to_i, 
      data_final:a.data_final.to_datetime.to_i*1000 
     } 
    end 
end 

而一个.js.erb

<script> 
    $(function() { 
     "use strict"; 
     $(".gantt").gantt({ 
      source: [{ 
       name: '<%= raw @mapa[:tasks][0][:descricao] %>', 
       desc: '<%= raw @mapa[:tasks][0][:status] %>'+"% concluído", 
       values: [{ 
        from: "/Date(<%= raw @mapa[:tasks][0][:data_inicial] %>)/", 
        to: "/Date(<%= raw @mapa[:tasks][0][:data_final] %>)/", 
        label:"<%= raw @mapa[:tasks][0][:descricao] %>", 
        customClass: "ganttRed" 
       }] 
      }], 
     scale: "days", 
     minScale: "days", 
     maxScale:"months", 
     navigate: "scroll", 
     waitText: "Aguarde...", 
    }); 
</script> 

我在阵列3倍的值,但是,怎么能看到的,我只取1,@mapa [:任务] [0] [:descricao] a如何取所有值?因为@mapa [:tasks] [:descricao]不起作用:/

谢谢!

回答

2

首先,我会写控制器更多这样的(未经测试)代码:

def grafico_gantt 
    @mapa = {} 
    @mapa[:tasks] = @projeto.atividades.map { |a| 
    { 
     id: a.id, 
     descricao: a.descricao, 
     status: a.status, 
     data_inicial: a.data_inicial.to_datetime.to_i * 1000, 
     tempo_gasto: a.tempo_gasto.to_i, 
     data_final: a.data_final.to_datetime.to_i * 1000 
    } 
    } 
end 

访问所有的返回数组的元素descricao,使用mapcollect来转换Ë数组只是部分你想要的:

@mapa[:tasks].collect { |e| e[:descricao] } 

mapcollect是同义的。虽然它们是别名,但有时它在语法上使用collect更有意义,有时map更有意义。

在上面代码的重写中,为了创建散列哈希值,有点令人困惑。散列的单个元素哈希有点......混乱......不雅,但也许你没有向我们展示一切。

如果不出意外被添加到哈希,我会推荐它简化到:

def grafico_gantt 
    @mapa = @projeto.atividades.map { |a| 
    { 
     id: a.id, 
     descricao: a.descricao, 
     status: a.status, 
     data_inicial: a.data_inicial.to_datetime.to_i * 1000, 
     tempo_gasto: a.tempo_gasto.to_i, 
     data_final: a.data_final.to_datetime.to_i * 1000 
    } 
    } 
end 

这将由于不再需要返回哈希的数组,并简化您的访问到它找到[:tasks]元素:

@mapa.collect { |e| e[:descricao] } 
+0

感谢您的帮助!奇怪不与我一起工作...我认为这必须继续我的旧代码:l 但是,非常感谢* - * –

0

怎么是这样的:

@mapa[:tasks].each{|e| puts e[:descricao] } 

@mapa[:tasks].map{|e| e[:descricao] } 
相关问题