2013-02-17 223 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

尝试拖尾您的日志/ development.log文件...什么数据库查询,你看到执行时,该方法运行? – rossta 2013-02-17 00:29:20

+0

不知道如何做所有这些,但这种方法是填充数据库的Rake任务的一部分,当我运行rake任务时,它不显示任何新的内容......只是运行命令并转到下一行...在日志中的DB?我不知道,我打开另一个终端并运行PostgreSQL ...在那个我看不到的地方。 – Bohn 2013-02-17 00:34:53

回答

4

首先尝试从循环代码中分离活动记录代码。因此,开始有:

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

相关问题