2013-06-24 2 views
-1

레코드가 있는데 배열 내부에 삽입하고 나중에 액세스하려고합니다.배열 레일에 삽입하기 3

users = User.all 

results = [] 

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

은 결과 변수가 여전히 배열입니까? 그렇다면 어떻게 모든 이름과 함께 이메일을받을 수 있습니까?

답변

1

귀하의 예 : 당신은 당신과 함께 예를 들어 나중에 원하는 것을 할 수 있습니다.

first_result_name = results[0][:name] 

을하지만, 노력의주의 :

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

당신은 직접과 같이 개별 항목에 액세스 할 수 있습니다

당신은 간단한 루프 가장 쉬운있는 여러 가지 방법으로 액세스 할 수 거기에 없을 수도있는 결과에 액세스 할 수 있습니다.

하지만 물어 봐야, 왜 이렇게할까요? User의 이름과 전자 메일을 모두 배열에 할당하면 아무런 이득도 얻지 못합니다. User.all도 기능면에서 전혀 다릅니다.

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

"결과는"지금이 컬렉션에 포함되어 있음을 감안할 때 :로

+0

어떻게 모든 결과에 액세스 할 수 있습니까? 결과 –

+0

그래서 어떤 형태로 그들을 원하십니까? –

+2

결과와 함께하고 싶은 것을 설명해 주시면 더 자세한 답변을 드릴 수 있습니다. – Matt

1

예, 여전히 배열입니다. 각 사용자의 이름과 이메일을 포함하는 해시 가득 배열 results을 만들 것

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.each do |user| 
    puts "#{user[:name]} #{user[:email]}" 
end