0

このバグは、Michael Hartl の Rails チュートリアルから scaffolded rails demo_app を再現しているときに発見しました。

Railsコンソールに入りました

レールc

ハッシュのUser.all配列を要求し、そのペースを調べました。

2.0.0-p0 :012 >ユーザー.all

  ユーザー負荷 (0.3ms) SELECT "users".* FROM "users"
 => [#<User id: 2, name: "Lisa Johnson", email: "ljohnson@yahoo.com", created_at: "2013-04-02 03:30:06", updated_at: "2013-04-02 03:30:06">]

2.0.0-p0 :013 >ユーザー.all[0]

  ユーザー負荷 (0.2ms) SELECT "users".* FROM "users"
 => #<User id: 2, name: "Lisa Johnson", email: "ljohnson@yahoo.com", created_at: "2013-04-02 03:30:06", updated_at: "2013-04-02 03 :30:06">

2.0.0-p0 :015 > User.all[0]['id']

  ユーザー負荷 (0.2ms) SELECT "users".* FROM "users"
 => 2

ここまでは順調ですね。

ただし、User.all は、すべてのユーザーの ID または名前だけを一覧表示するコマンドには応答しません。

2.0.0-p0 :017 > User.all { |i| puts i['id'] }

  ユーザー負荷 (0.2ms) SELECT "users".* FROM "users"
 => [#<User id: 2, name: "Lisa Johnson", email: "ljohnson@yahoo.com", created_at: "2013-04-02 03:30:06", updated_at: "2013-04-02 03:30:06"gt;]

2.0.0-p0 :019 > User.all{ |i| puts i['name'] }

  ユーザー負荷 (0.3ms) SELECT "users".* FROM "users"
 => [#<User id: 2, name: "Lisa Johnson", email: "ljohnson@yahoo.com", created_at: "2013-04-02 03:30:06", updated_at: "2013-04-02 03:30:06">]

任意の変数aをハッシュの配列 User.all に割り当てると、問題が解決します。

2.0.0-p0 :021 > a.each {|i| puts i['id'] }

2
 => [#<User id: 2, name: "Lisa Johnson", email: "ljohnson@yahoo.com", created_at: "2013-04-02 03:30:06", updated_at: "2013-04-02 03:30:06">]

2.0.0-p0 :022 > a.each {|i| puts i['name'] }

リサ・ジョンソン
 => [#<User id: 2, name: "Lisa Johnson", email: "ljohnson@yahoo.com", created_at: "2013-04-02 03:30:06", updated_at: "2013-04-02 03:30:06">]

このUser.all の問題は、少なくとも ruby​​ バージョン 1.9.2、1.9.3、および 2.0.0 に影響します。User.allを作成した gem の作成者は、自分のall メソッドを調べる必要があります。どんなに価値があっても、私はRails 3.2.12で作業しています

4

1 に答える 1

0

議論することはありません - 簡単なバグレポートです。質問がある場合、「User.allがハッシュの配列のように動作しないのはなぜですか?」という質問になります。

于 2013-05-13T12:13:25.620 に答える