0

私はこれを持っています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

どうもありがとうございました!

4

2 に答える 2

1

その最後のもの:

collect { |klass| klass.name }

のように書き直します

collect { |klass| [klass.name, klass.count] }

これは、2 つの要素 (クラス名とカウント) の配列の配列を返す必要があります。this が割り当てられている変数が a と呼ばれる場合は、次のようにします。

Hash[a]

これでハッシュを自由に使用できます。今、あなたはこれを行うことができます:

Hash[a].map do |k, v|
  {k => v}
end

これで、キーと値の関連付けがそれぞれ 1 つだけのハッシュの配列ができました。それはあなたが望むものだと思います。

于 2012-11-07T20:43:16.350 に答える
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}

MRIベースのルビーでのみ機能するため、jRubyもRunbiniusも機能しません。

これがライブデモです

于 2012-11-07T20:25:12.580 に答える