0

ハッシュを使用してユーザーを保存しようとしています。私はこのコードを持っていますが、それは機能していますが、それは私が望む方法ではありません:

@user_hash = Hash.new
@user_hash = User.all(:all)

user = Hash.new
user = @user_hash.select { |item| item["user_id"] == '001' }

puts user[0].name

user.nameinstedのようなものを使用するにはどうすればよいuser[0].nameですか?

4

3 に答える 3

5

まず、ハッシュを使用する前に初期化する必要はありません。ここでは、両方の呼び出しHash.newは不要です。

第二に、あなたの唯一の問題はあなたがそのselect方法を使っているということです。ドキュメントからの引用:

ブロックがtrueを返すエントリで構成される新しいハッシュを返します。

それはあなたが望むものではありません。使用するものdetect:列挙型の各エントリをブロックに渡します。ブロックがfalseではない最初のものを返します。

user = @user_hash.detect { |item| item["user_id"] == '001' }動作するはずです

于 2012-08-16T17:33:57.487 に答える
1

ハッシュを作成するには、次の構文を使用する必要があります。

@user_hash = Hash[User.find(:all).collect{|u| [u.user_id, u]}]

次に、次のようなことができます。

puts user["001"].name

于 2012-08-16T17:31:06.740 に答える
0

user = Hash.new次の結果で上書きしているため、時間の無駄ですselect

selectテストに合格したハッシュの配列を返します。

の代わりに、.findまたはその同義語が必要です。.detect.select

于 2012-08-16T17:36:05.583 に答える