2012-04-03 33 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