2017-03-10 10 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と呼びます。

関連する問題