2012-04-03 11 views
1

Ich versuche meine Rails 3 App zu säen und ein Problem zu treffen. My Category Tabelle hat folgende Felder:So erstellen Sie eine Kategorie und Unterkategorie mit Rake db: Seed

Zeichenfolge "name" integer "Position" integer "parent_id"

Die parent_id ist die ID einer anderen Kategorie, für 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) 

Wenn ich laufen

rake db:seed 

ich den Fehler:

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

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

So, wie erstelle ich die Kategorie zuerst so die ID 1 wird verfügbar sein?

Antwort

3

Das Problem mit Ihrer Version ist nicht, dass es nicht in Ordnung erstellt wird, dann ist es, dass der autoincrement dies nicht zurückgesetzt es eine ID nicht angegeben von 1.

Versuchen:

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

Ehrfürchtig, das hat funktioniert. Kann ich weiterhin auf second_category.id third_category verweisen oder wie referenziere ich die Elemente nach dem ersten? – ruevaughn

+0

Ok ich habe darüber nachgedacht und ich verstehe, dass es nicht automatisch inkrementiert. Muss ich also die ID finden, um auf das zweite oder dritte Element zu verweisen? – ruevaughn

+0

@ruevaughn Ordnen Sie die Category.create-Anweisung, die Sie erstellen, einfach einer Variablen zu und verweisen Sie dann auf die ID dieser Variablen. Die Variablennamen, die ich verwendet habe, sind willkürlich. – JamesSwift

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

habe ich versucht, diese Antwort und es so gut funktioniert. Vielen Dank. Ich wählte die andere Antwort, weil sie mehr eine Beschreibung hatte. – ruevaughn

1

Verwenden Sie einfach :parent_id => Company.first statt :parent_id => 1

+0

Ich habe diese Antwort versucht und es funktioniert auch. Danke – ruevaughn