Я новичок в рубине. Сейчас делаю небольшой проект. Но я не могу получить пользовательские данные из хеш-значений. Вот моя кодировка -

@user = {'name'=>"Chinmay", "email"=>"chixxx@gmail.com", "phone"=>"1234567890", "age"=>30}

Каждый из вышеперечисленных массивов я попытался получить в файле erb.

Вот код -

Name : <%= @user.name %>
Email: <%= @user.email %>
Phone: <%= @user.phone %>
Age: <%= @user.age %> Years

Я получаю сообщение об ошибке:

undefined method `name' for #<Hash:0x5e040d0>

Пожалуйста, помогите мне. Сообщите мне, как получить хеш-значение без использования цикла?

Я снова пытался @user[:name], и этот тоже не работал. приходит пустое сообщение.

Спасибо, что ответили.

1
Chinmay235 22 Апр 2016 в 09:59

8 ответов

Лучший ответ

Во-первых, ваш @user не массив, это хеш

По сути, хеш - это пара ключ-значение, и в вашем вводе name - это ключ, Chinmay - это значение и так далее!

Каждый именованный ключ - это символ, с помощью которого вы можете получить доступ к значению в хэше.

Итак, <%= @user['name'] %> - это способ, которым вы можете воспользоваться, если хотите получить доступ к имени из вашего хэша.

Это сделает вашу работу!

Name : <%= @user['name'] %>
Email: <%= @user['email'] %>
Phone: <%= @user['phone'] %>
Age:   <%= @user['age'] %> Years
2
Sri Harsha Kappala 22 Апр 2016 в 07:15

Вместо того:

Name : <%= @user.name %>
Email: <%= @user.email %>
Phone: <%= @user.phone %>
Age: <%= @user.age %> Years

Сделайте это как:

Name : <%= @user['name'] %>
Email: <%= @user["email"] %>
Phone: <%= @user["phone"] %>
Age: <%= @user["age"] %> Years
2
HashRocket 22 Апр 2016 в 07:04

@user - это хэш, вы должны получать доступ к values с помощью keys следующим образом:

Name : <%= @user['name'] %>
Email: <%= @user['email'] %>
Phone: <%= @user['phone'] %>
Age: <%= @user['age'] %> Years
2
dp7 22 Апр 2016 в 07:04

Правильный синтаксис для доступа к хешу:

@user['name']
@user['email']
# [...]
2
born4new 22 Апр 2016 в 07:04

Пользователь - это хеш, а не массив.

В Ruby вы получаете доступ к хеш-свойствам, таким как

@user['property']

Ура

2
zauzaj 22 Апр 2016 в 07:08

Прежде всего, то, что вы называете "ассоциативным массивом", - это хеш (см. Документацию здесь), и вы можете получить доступ к его элементам, используя каждый ключ как индекс массива.

Другими словами, вы должны написать:

Name : <%= @user['name'] %>
Email: <%= @user['email'] %>
Phone: <%= @user['phone'] %>
Age: <%= @user['age'] %> Years
1
Ed de Almeida 22 Апр 2016 в 07:05
<% @yourhash.map  do |k, v|  %>
    <%=  k.capitalize %>:
    <%= p v %><br>
    <% end %>

Решение с петлей

1
DDD 22 Апр 2016 в 11:31