2013-02-17 8 views
0

나는이 방법을 썼다첫 번째 요소 만 통과하는 이유는 무엇입니까?

def create_demo_organizations 

    sample_organizations = [ '37 Signals', 'Fog Creek'] 

    sample_organizations.each { |item| 
    Organization.first_or_create(
     name: item, 
     time_zone: 'Central' 
    ) 
    } 

end 

나는 그것이 나를 위해 배열의 이름을 가진 두 조직을 만들 것이라고 기대했다,하지만 난 UI 관리 도구에서 그것을 열 때 나는 단지 첫 번째 행을 볼 수 있습니다 두 번째 행이 아니라 '37 개의 신호 '에 대한 것입니다. 나는 그것을 잘못 쓰셨습니까?

목표는 해당 배열의 멤버를 반복하여 데이터베이스에 삽입하는 것이 었습니다.

+1

log/development.log 파일을 테일링 해보십시오. 해당 메소드가 실행될 때 실행 된 데이터베이스 쿼리는 무엇입니까? – rossta

+0

이 방법을 모두 수행하는 방법을 모르겠지만이 방법은 데이터베이스를 채우는 레이크 작업의 일부입니다. 새 작업을 전혀 실행하지 않으면 ... 그냥 명령을 실행하고 다음 줄로 이동합니다 ... 로그에서 ... DB의? 나도 몰라, 나는 다른 터미널을 열고 PostgreSQL을 실행합니다 ... 그 중 하나에서도 많이 볼 수 없습니다. – Bohn

답변

4

먼저 루프 코드에서 활성 레코드 코드를 분리하십시오. 그런 다음 마지막으로

sample_organizations.each do |item| 
    Organization.create(name: item) 
end 

:

sample_organizations.each do |item| 
    Organization.find_or_create(name: item) 
end 

편집 :

인쇄 된 두 항목을 얻는 경우

sample_organizations.each do |item| 
    puts item 
end 

는, 간단한 AR 호출을 추가 : 그래서 시작

first_or_create을 올바르게 부르는 것 같지 않습니다. 아마도 다음과 같은 것을 원할 것입니다 :

Organization.where(name: item).where(time_zone: 'Central').first_or_create 
+0

음, 새로운 WHERE 명령이 효과가 있었는데, 내가 작성한 방식과 당신의 방식이 다른 점은 무엇입니까? – Bohn

+1

Mine이 ActiveRecord :: Relation에서'first_or_create'를 호출하고 있습니다. 너의 클래스 자체에서 시도하고있다 (관계가 아니다). –

관련 문제