2013-11-27 5 views
-1

У меня есть хеш, как показано ниже. Мне нужно знать, могу ли я получить доступ к объекту display_name, чтобы он возвращал значения активной записи.Доступ к целевому объекту с помощью Hash

{ "actor"=> 
    { "id"=>1, "class"=>"User", "display_name"=>"#<User:0x007ffc8c498b18>" } 
} 

Я предполагаю, что могу, поскольку они не добавили бы его в первую очередь. Я знаю, что я могу использовать ключи id и class, но должна быть причина иметь целевой объект. Если это невозможно, почему, по вашему мнению, они добавили его, и что я могу с ним сделать?

+0

«Я предполагаю, что могу» Нет, вы определенно не можете. Это бесполезно. Мы не можем догадаться, почему «они» добавили его, мы можем только предположить, что они добавили его по ошибке. Это похоже на «отображаемое имя» для вас? – meagar

+0

Если это действительно структура, у вас есть, похоже, что где-то есть ошибка, так как это похоже на результат проверки объекта #, а не на сам объект, который был задан как значение в хеше. – Chuck

+0

@meagar WOW ... не знаю, так ли я прочитал ваше сообщение, но, пожалуйста, не грубите. Я задаю вопрос, потому что я не знаю, и поэтому я пришел, чтобы узнать это. @Chuck Спасибо, я посмотрю код и посмотрю, используется ли здесь 'Object # Inspect'. – Peter

ответ

1

К сожалению, вы не можете сделать это с помощью существующего хэша. Значение, связанное с ключом «display_name», является строкой. Это означает, что вы не сможете получить доступ ко всем пользовательским методам и атрибутам. Если бы я должен был догадаться, я бы сказал, что человек, который написал код, генерирующий хеш, мог предположить, что у класса User был метод to_s, который вернет отображаемое имя.

Я хотел бы попробовать один из этих подходов:

  1. Добавить to_s метод к User, который будет возвращать имени. Это может хранить соответствующие данные в вашем хеше.
  2. Найдите нужного пользователя, используя ключ «id», а затем вызовите необходимые атрибуты.
  3. Измените код, создающий хэш, чтобы сохранить фактический экземпляр User, а не его строковое представление.
  4. Измените код, создающий хэш, и сохраните соответствующий атрибут пользователя, а не его строковое представление.

Похоже, вы хотите сделать вариант 3 выше. Если вы это сделаете, я бы предложил переименовать ключ «display_name» в «user», чтобы сделать его более понятным, что вы храните.

+0

Я закончил делать вариант 1 после поиска этого сообщения, которое помогло объяснить, что происходит: http://stackoverflow.com/questions/15513154/what-is-the-def-to-s-function. Я приму свой ответ, хотя вы объяснили ряд различных решений. – Peter

Смежные вопросы