为什么每个人只会经历第一个元素?
问题描述:
我写这个方法:为什么每个人只会经历第一个元素?
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信号'而不是第二行。我写错了吗?
我的目标是迭代该数组的成员并将它们插入到数据库中。
答
首先尝试从循环代码中分离活动记录代码。因此,开始有:
sample_organizations.each do |item|
puts item
end
如果你要打印的两个项目中,添加一个简单的AR电话:
sample_organizations.each do |item|
Organization.create(name: item)
end
后来总算:
sample_organizations.each do |item|
Organization.find_or_create(name: item)
end
编辑:
我不认为你正确地打电话给first_or_create
。你可能想要的东西是这样的:
Organization.where(name: item).where(time_zone: 'Central').first_or_create
+0
嗯,你的新WHERE命令有效,我写的方式和你的方式有什么区别? – Bohn 2013-02-17 16:46:51
+1
我正在调用ActiveRecord :: Relation上的'first_or_create'。你的课堂上正在尝试它(这不是一种关系)。 – 2013-02-18 00:48:41
尝试拖尾您的日志/ development.log文件...什么数据库查询,你看到执行时,该方法运行? – rossta 2013-02-17 00:29:20
不知道如何做所有这些,但这种方法是填充数据库的Rake任务的一部分,当我运行rake任务时,它不显示任何新的内容......只是运行命令并转到下一行...在日志中的DB?我不知道,我打开另一个终端并运行PostgreSQL ...在那个我看不到的地方。 – Bohn 2013-02-17 00:34:53