1

我有一个控制器:

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[:tasks][0][:descricao] 如何取所有值?因为@mapa[:tasks][:descricao] 不起作用:/

谢谢!

4

2 回答 2

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返回数组的所有元素,请使用maporcollect将数组转换为您想要的部分:

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

map并且collect是同义词。尽管它们有别名,但有时在语法上使用 更有意义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] }
于 2013-07-30T13:34:36.807 回答
0

这怎么样 :

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

或者

@mapa[:tasks].map{|e| e[:descricao] }
于 2013-07-30T13:00:01.730 回答