В приложении-скаффолде Хартла обнаружена ошибка Rails User.all. Почему User.all не отвечает на команду, как массив хэшей?

Я обнаружил эту ошибку, когда воспроизводил демо-приложение Майкла Хартла (Michael Hartl) из его руководства по рельсам.

Я зашел в консоль рельсов

рельсы c

Я запросил массив хэшей User.all и прогнал его по шагам:

2.0.0-p0 :012 > User.all

  User Load (0.3ms)  SELECT "users".* FROM "users" 
 => [#<User id: 2, name: "Lisa Johnson", email: "[email protected]", created_at: "2013-04-02 03:30:06", updated_at: "2013-04-02 03:30:06">]

2.0.0-p0 :013 > Пользователь.все[0]

  User Load (0.2ms)  SELECT "users".* FROM "users" 
 => #<User id: 2, name: "Lisa Johnson", email: "[email protected]", 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']

  User Load (0.2ms)  SELECT "users".* FROM "users" 
 => 2 

Все идет нормально.

Однако User.all не отвечает на команду перечислить, скажем, только идентификаторы или имена всех пользователей:

2.0.0-p0 :017 > User.all { |i| помещает i['id']

  User Load (0.2ms)  SELECT "users".* FROM "users" 
 => [#<User id: 2, name: "Lisa Johnson", email: "[email protected]", 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| помещает я['имя']

  User Load (0.3ms)  SELECT "users".* FROM "users" 
 => [#<User id: 2, name: "Lisa Johnson", email: "[email protected]", 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| помещает i['id']

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

2.0.0-p0 :022 >a.each {|i| помещает я['имя']

Lisa Johnson
 => [#<User id: 2, name: "Lisa Johnson", email: "[email protected]", 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, должен просмотреть свой метод all. Что бы это ни стоило, я работаю с рельсами 3.2.12.


person Vietnhi Phuvan    schedule 13.05.2013    source источник


Ответы (1)


Обсуждать нечего - это простой отчет об ошибке. Если есть вопрос, то вопрос будет "почему User.all ведет себя не так, как массив хэшей?"

person Vietnhi Phuvan    schedule 13.05.2013