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

相關問題