0

私がしていることの表面は些細に聞こえます。ActiveRecord オブジェクトを取得し、それらから次の形式を含むハッシュを作成したいと考えています。

@records を取得して、次のように変換します。

{ record.id => [record.attr1, record.attr2], record.id => [...] }

次のようなものを使用してこれを実行しようとしています:

Hash[*@records.map{|r| [r.attr1, r.attr2 ]}.flatten]

しかし、上記の例のように見える正しい構文を取得できないようです。

** 求められていることをより明確にするために更新中 **

具体例を挙げてみましょう。私は猫の配列を持っています。これは、name(string) と age(int) の 2 つの属性を持つ Cat モデルから派生します。次のようにして、猫の配列を取得したいと思います。

# I realize this isn't optimal but that's not the point of this question
@cats = Cat.all.entries

次に、JSON ハッシュをクライアントに渡そうとしています。このハッシュには、キーとして各猫インスタンス ID と、猫の名前と年齢の配列である値が含まれています。

結果のハッシュは、適切な Hash/zip コンボが @cats 配列で実行された後のようなものになります。

{ "15" : ["charles", 3], "18" ["winnie", 5], ... }

私は次のようなことをしようとしています:

Hash[*@cats.map{|c| [c.name, c.age ]}.flatten]

これはもっと理にかなっていますか?

4

1 に答える 1

0
def hash_of_arrays(cats)   
  {}.tap do |hashie|   
    cats.each do |cat|  
      hashie[cat.id] = [cat.name, cat.age]  
    end  
  end   
end

puts hash_of_arrays(@cats).inspect
于 2013-04-26T21:33:54.680 に答える