Нужно знать, как обрабатываются хеш-ключи в ruby - PullRequest
1 голос
/ 12 ноября 2009

Я работаю над проектом ruby ​​rails.Я использую Rails 2.3.4 и ruby ​​1.8.7.У меня есть модель с именем пользователя.

У меня есть следующий код в инициализаторе

$h =  {User => 'I am user' }

В контроллере у меня есть следующий код

$h[User]

Первый раз, когда я ч[Пользователь] Я получаю правильный результат.Однако, если я обновлю страницу, я получу нулевое значение.

Я думаю, что это именно то, что происходит.

В первый раз, когда загружается класс User, я получаю правильное значение.Однако когда я обновляю страницу, тогда этот контроллер времени возвращает значение nil для $ h [User].

Поскольку rails выгружает все константы при обновлении страницы, поэтому кажется, что загружен новый класс User.Этот класс User отличается от User, который использовался в качестве ключа в инициализаторе.

Я знаю, что использование класса User - плохая практика.Мой вопрос: может ли кто-нибудь объяснить мне, когда класс User используется в качестве ключа, а затем внутренне, как ruby ​​хранит ключ.Использует ли ruby ​​объектный_идентификатор пользователя в качестве ключа?I

Ответы [ 2 ]

4 голосов
/ 12 ноября 2009

Hash вызывает метод hash для любых объектов, используемых в качестве ключа. И да, ваша теория о том, почему ваш код не работает, верна.

Попробуйте это в консоли Rails:

User.hash # => 215678765 (or whatever)
reload! 
User.hash # => 215876673

Перезагрузка класса изменила значение, возвращаемое методом hash, означая, что он больше не тот же ключ, когда используется в Hash.

Используйте :user или что-то еще, что каждый раз разрешается одним и тем же ключом.

0 голосов
/ 12 ноября 2009

Метод hash используется для каждого объекта, используемого в качестве ключа в хэше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...