2012-04-03 2 views
1

Я пытаюсь засеять мои рельсы 3 приложения и попал в проблему. Моя категория Таблица содержит следующие поля:Как создать категорию и подкатегорию с rake db: seed

строки «имя» «позиции» целого числа «parent_id»

parent_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

Проблема с версией является не то, что он не создан для того, что это, что автоинкремент не сбрасывается, так что не дано идентификатор из 1.

Try:

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 третью категорию как это или как мне сначала ссылаться на элементы? – ruevaughn

+0

Хорошо, я подумал об этом, и я понимаю, что он не автоинкремент. Так мне нужно найти идентификатор для ссылки на второй или третий элемент? – ruevaughn

+0

@ruevaughn Просто назначьте оператор Category.create, который вы создаете для переменной, а затем укажите идентификатор этой переменной. Имена переменных, которые я использовал, являются произвольными. – 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

Я попробовал этот ответ, и он работает хорошо. Благодарю. Я выбрал другой ответ, потому что у него было больше описания. – ruevaughn

1

Просто используйте :parent_id => Company.first вместо :parent_id => 1

+0

Я пробовал этот ответ, и он тоже работает. Спасибо – ruevaughn

Смежные вопросы