2012-04-03 99 views
1

我想讓我的rails 3應用程序種子,並且遇到問題。我的類別表有以下字段:如何使用rake數據庫創建類別和子類別:種子

字符串「name」 整數「位置」 整數「PARENT_ID」

的PARENT_ID是另一類別的ID,用於nested_set。

Seeds.rb

Category.delete_all 
Category.create(:name => "Category 1", 
       :position => 1, 
       :parent_id => nil) 

Category.create(:name => "Subcategory 1", 
       :position => 1, 
       :parent_id => 1) 

當我運行

rake db:seed 

我得到的錯誤:

rake aborted! 
Couldn't find Category with id=1 

Tasks: TOP => db:seed 
(See full trace by running task with --trace) 

那麼,如何我首先創建類別,因此ID 1將能得到的?

回答

3

與您的版本的問題不在於它是不是正在爲了創建,它是自動增量不重置所以它沒有給出一個ID 1.

嘗試:

Category.delete_all 
first_category = Category.create(:name => "Category 1", 
      :position => 1, 
      :parent_id => nil) 
second_category = Category.create(:name => "Subcategory 1", 
      :position => 1, 
      :parent_id => first_category.id) 
+0

太棒了,工作。我可以繼續像那樣繼續引用second_category.id third_category,或者我如何引用第一個元素之後的元素? – ruevaughn 2012-04-03 04:40:23

+0

好吧,我已經考慮過它,我明白它不會自動增量。那麼我需要找到ID來引用第二個或第三個元素? – ruevaughn 2012-04-03 04:48:14

+0

@ruevaughn只需將您正在創建的Category.create語句分配給一個變量,然後引用該變量的ID即可。我使用的變量名是任意的。 – JamesSwift 2012-04-03 04:51:39

2
Category.delete_all 
parent = Category.create(:name => "Category 1", 
       :position => 1, 
       :parent_id => nil) 

Category.create(:name => "Subcategory 1", 
       :position => 1, 
       :parent => parent) 
+0

我想這個答案,它的工作原理也是如此。謝謝。我選擇了其他答案,因爲它有更多的描述。 – ruevaughn 2012-04-03 05:01:59

1

只需使用:parent_id => Company.first代替:parent_id => 1

+0

我試過這個答案,它也適用。謝謝 – ruevaughn 2012-04-03 05:01:18