【发布时间】:2017-05-22 16:25:05
【问题描述】:
我有一个模型,可以找到不同的日期,然后按年、月、日对值进行分组:
def self.tree
dates = MyModel.order("date_trunc('day', datetime_column) DESC")
.distinct.pluck("date_trunc('day', datetime_column)")
hash = Hash.new { |h, y| h[y] = Hash.new { |h2, m| h2[m] = {} } }
dates_by_ymd = dates.each_with_object(hash) do |date, h|
h[date.year][date.strftime('%B')][date.strftime('%b %d')] = date
end
end
在查看此哈希时打印出来:
{2016=>{"November"=>{"Nov 20"=>Sun, 20 Nov 2016 05:20:00 UTC +00:00}, "December"=>{"Dec 12"=>Mon, 12 Dec 2016 04:05:00 UTC +00:00, "Dec 24"=>Sat, 24 Dec 2016 18:51:33 UTC +00:00, "Dec 30"=>Fri, 30 Dec 2016 06:20:00 UTC +00:00}}, 2017=>{"December"=>{"Dec 12"=>Tue, 12 Dec 2017 15:15:00 UTC +00:00}}}
在控制器中我有这个:
def update_placements
@placements = #code which finds placements
@treeview = @placements.tree
respond_to do |format|
format.js
end
end
如何将上面的 hash 变成一些漂亮的 javascript 树视图? 对于example like here:
如果有任何提示,我将不胜感激。谢谢!
加法
此外,我还需要能够获取特定日期的记录。基本上它会打开年、月、日,然后填充特定日期的记录。我正在考虑一起加载年、月、日,然后每天分别加载记录,因为表可能会变得很大。当天的记录可以找到购买datetime_column。
更新
在视图中有这个填充树视图的代码:
<div id="tree">
<script>
$('#tree').jstree({
'core' : {
'data' : [ <%= raw @treeview %> ]
}
});
</script>
</div>
请问如何将年份(在下面的示例中为 2017 年、2016 年)设为根节点?我想摆脱“根”。
data 的 JS 像这样:
$('#tree').jstree({
'core' : {
'data' : [ { 'text' : 'Child 1' }, 'Child 2' ]
}
});
会像这样摆脱“节点”:
在“儿童 1”、“儿童 2”... 我需要填充我的 2016、2017 等。上面 JS 中的“文本”是您代码中的“数据”。
【问题讨论】:
-
你知道 JSON 应该是什么样子吗?
-
@EricDuminil 这里是例子 - jstree.com/docs/json 我想最简单的 JSON 版本就可以了,因为没有太多数据要加载(几千个项目)。
-
@EricDuminil 关于树的数量,最后我需要能够加载与特定日期相关的记录(我会为此单独查询)。可能AJAX option from here 是他们要走的路。
标签: javascript ruby-on-rails arrays json ruby