1

Category約 1000 レコードを含むというモデルがあります。非常にまれに変更されます。キャッシュすることで何百万ものデータベース ヒットを回避したいのですが、これは大したことではありません。

しかし、1行でそれを行う方法がわからないことがわかりました。私は2つでそれを行うことができます:

category_hash = {}
Category.each { |c| category_hash[c.id] => category }

ブロックから 2D 配列を返す方法を知っています。しかし、そのようなブロックからハッシュを作成して返す方法はありますか?

4

3 に答える 3

4

Rails にはEnumerable#index_byがあります:

category_hash = Category.all.index_by(&:id)

Rails がなければ、次のように使用します。

Hash[Category.all.map{ |c| [c.id, c] }]

Hash::[]フラット配列とネストされた配列の両方からハッシュを作成します。

Hash["a", 100, "b", 200]             #=> {"a"=>100, "b"=>200}
Hash[ [ ["a", 100], ["b", 200] ] ]   #=> {"a"=>100, "b"=>200}
于 2013-05-18T05:58:46.327 に答える