2013-06-24 2 views
-1

У меня есть запись, и я хочу вставить ее внутри и массив, а затем получить доступ к ней.Вставка в решетку массивов 3

users = User.all 

results = [] 

users.each do |user| 
    results << {:name => user.name, :email => user.email} 
end 

is results variable все еще массив? Если да, то как я могу получить все имена вместе с электронной почтой?

ответ

1

Ваш пример создаст массив results заполненный хэшей, содержащих каждое имя и адрес электронной почты пользователей.

Вы можете получить доступ к нему несколькими способами, самый простой из которых является простой цикл:

results.each do |result| 
    name = result[:name] 
    email = result[:email] 
end 

Вы также можете получить доступ к отдельным пунктов непосредственно следующим образом:

first_result_name = results[0][:name] 

, но будьте осторожны, пытаясь для доступа к результатам, которые могут отсутствовать.

Но я должен спросить, почему вы хотите это сделать? Нет никакой выгоды от назначения всего имени и электронной почты User в массив, User.all не отличается в действительности функциональностью.

+0

как я могу получить доступ ко всем результатам, я просто хочу do results –

+0

Итак, в какой форме вы хотите их? –

+2

Объясните, что вы хотите сделать с результатами, и мы можем дать более целевой ответ. – Matt

1

Да, это все еще массив. Вы можете иметь то, что вы хотите позже, например, с:

results.each do |result| 
    result[:name] # access to name 
    result[:email] # access to email 
end 
0

Вам просто нужно одну строки, чтобы сделать это

results = users.collect{|user| {:name => user.name, :email => user.email}} 
+0

спасибо, буду использовать его –

0

В своем роде несвязанной образом, ваш исходный код может быть переписан в виде:

results = User.all.inject([]) do |array, user| 
    array << {:name => user.name, :email => user.email} 
end 

Учитывая, что «результаты» теперь содержит эту коллекцию хешей, если вы хотите напечатать каждое имя пользователя и адрес электронной почты:

results.each do |user| 
    puts "#{user[:name]} #{user[:email]}" 
end