2015-11-08 3 views
2

Я хотел бы заполнить таблицу отдела, используя файл seeds.rb. Я создал только две колонки в таблице. Еще три создаются с помощью rails (id, created_at, updated_at).Как создать массив seeds.rb?

Когда я бегу rake db:seed, я получаю следующее сообщение об ошибке:

ArgumentError: wrong number of arguments (3 for 0..1)

Вот что seeds.rb файл выглядит следующим образом:

departments = Department.create([{ depttitle: 'dept 1' }, { deptdescription: 'this is the first dept' }], 
[{ depttitle: 'dept 2' }, { deptdescription: 'this is the second dept' }], 
[{ depttitle: 'dept 3' }, { deptdescription: 'this is the third dept' }]) 

ли проблема с тем, как я создал массив или что-то другое?

+0

Каждая запись должна быть одним хэшем, с каждым атрибутом определить пару ключ-значение. Не массив хэшей, состоящий из одной пары ключ-значение. Вы должны найти документацию и примеры для метода 'create'' ActiveRecord :: Base' – lurker

+0

Есть ли у каждой записи свою собственную строку? Вы переписываете отделы каждый раз? Или вам нужна переменная отделов? Пример был бы замечательным. – 4thSpace

ответ

6

Причина, по которой она не работает, состоит в том, что вы фактически прошли три массива с двумя хэшами в каждом из них.

Передайте один массив методу #create с одним хэшем для каждой записи, которую вы хотите создать. Например:

Department.create([{ deptitle: 'dept 1', deptdescription: 'this is the first dept' }, 
        { depttitle: 'dept 2', deptdescription: 'this is the second dept' }]) 

Но вместо того, чтобы «создать массив» вы можете использовать простой цикл для создания департамента записей.

10.times do |x| 
    Department.create({deptitle: "dept #{x}", deptdescription: "this is the #{x} department"}) 
end 

По-моему, он выглядит более чистым, занимает меньше места, и вам легче изменить количество записей семян.

Чтобы создать цифру из числа (для предложения «это предложение Xst»), вы можете использовать драгоценный камень humanize.

0

Вы можете создать свои записи отдельно, как показано ниже.

Department.create(depttitle: 'dept 1' , deptdescription: 'this is the first dept') 
Department.create(depttitle: 'dept 2' , deptdescription: 'this is the second dept') 
1

, как мы делаем это следующим образом:

departments = [ 
    {depttitle: "Title", deptdescription: "description"}, 
    {depttitle: "Title2", deptdescription: "description2"}, 
    {depttitle: "Title3", deptdesctiption: "description3"} 
] 

Вы можете затем цикл через них, как это:

departments.each do |department| 
    Department.create department 
end 

@Sebastian Brych «s ответ является правильным, хотя - вы передаете массивы каждая новая запись, когда вы должны передать один массив с несколькими хэшами.

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