2014-11-03 3 views
5

그래서 나는과 같이 해시의 배열이있는 경우 : (루비 초보자)으로 반복

input = [ 

{"last_name"=>"Gay", "first_name"=>"Rudy", "display_name"=>"Rudy Gay", "position"=>"SF", "minutes"=>39, "points"=>25, "assists"=>6}, 
{"last_name"=>"Collison", "first_name"=>"Darren", "display_name"=>"Darren Collison", "position"=>"PG", "minutes"=>39, "points"=>14, "assists"=>4} 

] 

은 내가 어떻게 배열을 통해 반복 것뿐만 아니라 뭔가를 각 해시를 통해 반복을

재생기 = {DISPLAY_NAME => "루디 게이", "위치"=> "SF"}

player2 = {DISPLAY_NAME => "대런 콜리슨를", "위치"=> "PG"이런 }

input.each do |x| 
Player.create(name: x['display_name'], position: x['position'] 
end 

처럼 ething

이를 달성하기 위해 더 나은 방법이 있나요 (I는 플레이어 모델이 가정)?

감사합니다.

+0

그 코드가 정확합니다. 누락 된 후행')'을 제외하고. 문제가 무엇입니까? 오류가 있습니까? –

+0

안녕하세요 시몬, 더 루비 방법이 있을지 궁금하거나 더 효율적이라면 궁금합니다. – meowmixplzdeliver

+0

이 답변을 확인하십시오 : http://stackoverflow.com/a/10022240/4178151. 해시 배열을 create 메소드에 직접 전달하여 하나의 큰 삽입을 수행 할 수 있습니다. – nikkon226

답변

7

이 입력을 감안할 때 : 그 열쇠 (LAST_NAME, FIRST_NAME, DISPLAY_NAME) 모두가 Player 모델에있는 경우

input = [ 
    { "last_name"=>"Gay", ... }, 
    { "last_name"=>"Collison", ...} 
] 

, 당신은 할 수있는 다음을 취할 것

input.each do |x| 
    Player.create(x) 
end 

create 때문에 할당 할 속성의 해시입니다. 그러나, 더 나은, 당신도 반복 할 필요가 없습니다 : 당신이 그것을 해시의 배열을주는 모든 경우

Player.create(input) 

액티브가 그들을 통해 이동합니다.

+0

고마워요! Player.name = "darren collison"처럼 내 Player 모델과 내 조인 테이블 (Stat 모델)간에 해시를 나누기를 원하지만 점, 어시스트 등을 Stat.assist처럼 저장하면 어떨까요? (희망을 의미하는 바램) 게임, 플레이어 및 통계 모델이 있습니다. 통계는 게임과 플레이어 간의 조인 테이블입니다. – meowmixplzdeliver

+0

의견을 말하기가 쉽지 않습니다. 정말 새로운 질문입니다. [AR 협회 안내서] (http://guides.rubyonrails.org/association_basics.html)를 읽으면 꽤 가까워 질 것입니다. 다른 세부 정보는 방금 다시 게시하고 다른 누군가는 반드시 나머지 방법을 제공합니다. –