首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据映射器仅保存周期中的最后一个元素

数据映射器仅保存周期中的最后一个元素
EN

Stack Overflow用户
提问于 2017-03-10 13:21:38
回答 1查看 28关注 0票数 0

将保存最后一个元素。您可以运行脚本17次,并保存所有内容。发生了什么?!

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2017-03-10 13:39:48

因为c是在循环外部初始化的,所以您只是一次又一次地覆盖相同的对象。

解决方案是将c初始化移到循环中,如下所示:

代码语言:javascript
复制
@countries.each { |x|
  c = Cities.new
  c.header = x
  c.save
}

或者简单地说:

代码语言:javascript
复制
@countries.each { |x|
  Cities.create!(header: x)
}

另外,您的型号名称应该是单数,而不是复数。因此,您应该将其命名为City而不是Cities

另外,使您的循环变量名更具描述性,因此可以将其命名为country,而不是x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42710830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档