我在models_name
:
model_names = Object.constants.collect { |sym| Object.const_get(sym) }.select { |constant| constant.class == Class && constant.include?(Mongoid::Document) }.collect { |klass| klass.name }
结果是:
["Model_name1","Model_name2","Model_name3"]
我需要类似的东西:
[{"Model1":"Count"},{"Model2":"Count"},{"Model3":"Count"}]
我需要在图表中显示每个模型中的所有模型和对象计数器都在使用morris.js
您可以看到示例:
http://jsbin.com/uzosiq/2/embed?javascript,live
非常感谢!
答案 0 :(得分:1)
最后一个:
collect { |klass| klass.name }
将其重写为
collect { |klass| [klass.name, klass.count] }
这应该返回一个包含2个元素(classname和count)的数组。如果将分配了该变量的变量称为a,则执行以下操作:
Hash[a]
现在你可以随意使用哈希。现在你可以这样做:
Hash[a].map do |k, v|
{k => v}
end
现在你有一个哈希数组,每个哈希只有一个键值。我觉得这就是你想要的。
答案 1 :(得分:0)
module Foo
end
class Bar
include Foo
end
1.upto(5) { Bar.new }
model_names = Object.constants.collect { |sym| Object.const_get(sym) }.
select { |constant| constant.class == Class && constant.include?(Foo) }.
inject({}) do |m,klass|
m.update klass.name => ObjectSpace.each_object(klass).to_a.size
end
p model_names
{"Bar"=>5}