- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个模型,其中找到不同的日期,然后按年、月、日对值进行分组:
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
在 View 中打印出这个哈希值:
{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}}}
在 Controller 中我有这个:
def update_placements
@placements = #code which finds placements
@treeview = @placements.tree
respond_to do |format|
format.js
end
end
如何将上面的散列转换为一些漂亮的 javascript TreeView ? 对于 example like here :
如果有任何我应该关注的提示,我将不胜感激。谢谢!
添加
此外,我需要能够获取特定日期的记录。基本上它会打开年、月、日,然后填充特定日期的记录。我正在考虑将年、月、日一起加载,然后每天的记录将单独加载,因为表可能会变得很大。可以在购买 datetime_column
中找到当天的记录。
更新
View 中有填充 TreeView 的代码:
<div id="tree">
<script>
$('#tree').jstree({
'core' : {
'data' : [ <%= raw @treeview %> ]
}
});
</script>
</div>
如何将年份(在下面的示例中为 2017 年、2016 年)作为根节点?我想摆脱“根”。
带有数据
的JS如下:
$('#tree').jstree({
'core' : {
'data' : [ { 'text' : 'Child 1' }, 'Child 2' ]
}
});
会像这样摆脱“节点”:
在“Child 1”、“Child 2”中...我需要填充我的 2016 年、2017 年等。上面 JS 中的“文本”就是代码中的“数据”。
最佳答案
一旦你有dates_ymd
:
{2017=>
{1=>
{8=>#<Date: 2017-01-08 ((2457762j,0s,0n),+0s,2299161j)>,
3=>#<Date: 2017-01-03 ((2457757j,0s,0n),+0s,2299161j)>}},
2015=>
{12=>{5=>#<Date: 2015-12-05 ((2457362j,0s,0n),+0s,2299161j)>},
11=>{7=>#<Date: 2015-11-07 ((2457334j,0s,0n),+0s,2299161j)>}}}
您可以使用此方法:
def to_js_tree(hash = tree, node = :root)
hash.each_with_object({data: node}){|(k,v), new_hash|
new_hash[:children] ||= []
if v.is_a?(Hash)
new_hash[:children] << to_js_tree(v,k)
else
new_hash[:children] << {data: k, :children => [{data: v}]}
end
}
end
示例:
pp to_js_tree(dates_by_ymd)
# =>
{:data=>:root,
:children=>
[{:data=>2017,
:children=>
[{:data=>1,
:children=>
[{:data=>8,
:children=>
[{:data=>#<Date: 2017-01-08 ((2457762j,0s,0n),+0s,2299161j)>}]},
{:data=>3,
:children=>
[{:data=>#<Date: 2017-01-03 ((2457757j,0s,0n),+0s,2299161j)>}]}]}]},
{:data=>2015,
:children=>
[{:data=>12,
:children=>
[{:data=>5,
:children=>
[{:data=>#<Date: 2015-12-05 ((2457362j,0s,0n),+0s,2299161j)>}]}]},
{:data=>11,
:children=>
[{:data=>7,
:children=>
[{:data=>
#<Date: 2015-11-07 ((2457334j,0s,0n),+0s,2299161j)>}]}]}]}]}
和
puts to_js_tree(dates_by_ymd).to_json
#=> {"data":"root","children":[{"data":2017,"children":[{"data":1,"children":[{"data":8,"children":[{"data":"2017-01-08"}]},{"data":3,"children":[{"data":"2017-01-03"}]}]}]},{"data":2015,"children":[{"data":12,"children":[{"data":5,"children":[{"data":"2015-12-05"}]}]},{"data":11,"children":[{"data":7,"children":[{"data":"2015-11-07"}]}]}]}]}
就您而言,您可以直接调用:
@placements.to_js_tree.to_json
如果你已经定义了
def self.to_js_tree(hash = tree, node = :root)
在您的展示位置模型中。
如果你不想要一个以年份作为子节点的根节点,而是一个以多棵树和年份作为根的数组,你可以添加一个新的 to_js_trees
方法:
def to_js_trees(hash = tree)
hash.map{|year, year_tree|
to_js_tree(year_tree, year)
}
end
注:@treeview
现在已经是一个数组了,所以你可以使用'data' : <%= raw @treeview %>
而不是'data' : [ <%= raw @treeview %> ]
关于javascript - rails 5 : JS treeview from hash of dates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530568/
我正在尝试使用 Rust 的 std::hash 函数: use std::hash::{hash, Hash, SipHasher}; #[test] fn hash_test() { pr
我有以下内容 friends = [{ name: "Jack", attr1:"def", attr2:"def" }, { name: "Jill", attr1:"def", attr2:"de
我有以下数组: names = [ {"Adriana"=>{:gender=>"female", :nationality=>"danish"}}, {"Adriane"=>{:gender=>"f
我有一个哈希的 Perl 哈希......大约 11 或 12 个元素深。请原谅我没有重复下面的结构! 一些级别有固定的标签,例如'NAMES' , 'AGES'或类似的,因此访问这些级别很好,因为我
我试图派生一个描述结构化值的Graphviz文件。这是出于诊断目的,因此我希望我的图形尽可能接近地反射(reflect)内存中的实际结构。我正在使用下面的方法将值映射到Graphviz顶点,以便当一个
我正在尝试获取在 xlm 中传递的事件日志条目,将它们转换为散列,然后存储到数据库中。 我目前正在使用 XmlSimple gem 将 xml 输入转换为散列。 测试样本输入: require 'xm
对于 Ruby 中的 Hash,reject! 和 reject 与 delete_if 有何不同?谁能用简单的代码片段解释它们之间的区别? 最佳答案 由于其他答案指的是 Array#delete_i
我正在尝试处理我使用 Data::Dumper 输出的 perl 数据结构 $VAR1 = 'GAHD'; $VAR2 = [ { 'COUNTRY' => 'US',
无法使用来自辅助进程的现有 rte Hash: h = rte_hash_find_existing("some_hash"); if (h) { // this will w
我有一个散列的散列,其中第一个键是一个字符串,第二个键是一个整数。我试图在散列的散列中获得最低的第二个键。这是我的哈希。 %HoH = ( flintstones => { 8
如何从一系列数组中生成哈希中的哈希?我需要从这里开始: my @data = /one two three/; my $value = 13: 为此: $hoh = { 'one' => { 'two
我有这个配置文件 dbUser=customer dbPass=passwrd dbSid=customer.shadow passwdFile=/production/etc-user tmpUse
我想实现一种thing,可以唯一标识,除此之外,它不包含其他字段。它有点像 ruby 中的 BasicObject 或 java 中的 Object。 我添加了一个 PartialEq 特征。 s
我正在尝试使用以下键存储二维哈希: 维度 1 = 数字但不连续 维度 2 = 字符串(如 :id 和 :value) 当元素未初始化时会出现问题。 memory = Hash.new(Hash.new
我目前正在学习 Michael Hartl 的 Ruby on Rails 教程 不理解在 section 4.4.1 中找到的此语句的含义: Hashes, in contrast, are dif
我很乐意通过更短的表达式访问多维哈希数组的任何元素 h = {a: {b: 'c'}} # default way p h[:a][:b] # => "c" # a nicer way p h[:a,
我想在编写 flutter channel beta 后运行 flutter web 它回复:Can't load kernel binary:Invalid SDK hash,你知道如何解决这个问题
我最近正在研究 Amazon 提供的新 NoSQL 服务,更具体地说是 DynamoDB。 亚马逊说你应该避免使用不均匀分布的键作为主键,即主键应该越独特越好。我可以认为这是最好的情况下每个项目都有唯
我的游戏中有很多哈希值,例如 HMSET('hash1', 'level', 25, 'connected', 2) HMSET('hash2', 'level', 50, 'connected',
我必须翻译这句话:'Susspected overpass-the-hash attack (Kerberos)' 我发现了这篇关于立交桥哈希的文章:https://blog.stealthbits.
我是一名优秀的程序员,十分优秀!