我有一个控制器:
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]不起作用:/
谢谢!
答案 0 :(得分: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
元素,请使用map
或collect
将数组转换为您想要的部分:
@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] }
答案 1 :(得分:0)
这是怎么回事:
@mapa[:tasks].each{|e| puts e[:descricao] }
或
@mapa[:tasks].map{|e| e[:descricao] }