2017-03-10 6 views
0

마지막 요소를 저장합니다. 17 번 스크립트를 실행하고 모든 것을 저장할 수 있습니다. 무슨 일이야?!데이터 매퍼는 사이클의 마지막 요소 만 저장합니다.

class Cities 
    include DataMapper::Resource 
    property :id, Serial 
    property :header, String 
    default_scope(:default).update(:order => [:id.desc]) 
end 

@countries = [ "Mumbai", "Delhi", "Bengaluru", "Hyderabad", "Ahmedabad", "Accra", "Kumasi", "Lagos", "Kano", "Ibadan", "Beijing", "Shanghai", "Guangzhou", "Hangzhou", "Chongqing", "Wuhan" ] 

c = Cities.new 

@countries.each { |x| 
c.header = x 
c.save 
} 
+0

직접 사용해보십시오. 나는 나쁜 루비가 있을지도 모른다? :))))))) – Denis

답변

0

c은 루프 외부에서 초기화되므로 동일한 객체를 반복해서 덮어 쓰는 것입니다.

솔루션은 다음과 같이 루프 내부에 c 초기화를 이동하는 것입니다 :

@countries.each { |x| 
    c = Cities.new 
    c.header = x 
    c.save 
} 

또는 단순히 :

@countries.each { |x| 
    Cities.create!(header: x) 
} 

또한 모델의 이름은 복수, 단수되지해야합니다. 따라서 Cities 대신 City으로 지정해야합니다.

더하기 루프 변수 이름을 좀 더 설명적으로 만드므로 x 대신 country이라고 부를 수 있습니다.